From 58f9c4fc0055821d88869aafd49e0424b1070a79 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Thu, 12 Dec 2024 12:19:12 -0600 Subject: [flang][OpenMP] Semantic checks for IN_REDUCTION and TASK_REDUCTION (#118841) Update parsing of these two clauses and add semantic checks for them. Simplify some code in IsReductionAllowedForType and CheckReductionOperator. --- flang/include/flang/Parser/dump-parse-tree.h | 3 + flang/include/flang/Parser/parse-tree.h | 19 +- flang/lib/Lower/OpenMP/Clauses.cpp | 28 +- flang/lib/Parser/openmp-parsers.cpp | 19 +- flang/lib/Parser/unparse.cpp | 11 +- flang/lib/Semantics/check-omp-structure.cpp | 302 ++++++++++----------- flang/lib/Semantics/check-omp-structure.h | 11 +- flang/test/Parser/OpenMP/in-reduction-clause.f90 | 12 +- flang/test/Parser/OpenMP/reduction-modifier.f90 | 2 +- flang/test/Parser/OpenMP/task-reduction-clause.f90 | 23 ++ .../Preprocessing/directive-contin-with-pp.F90 | 6 +- flang/test/Semantics/OpenMP/in-reduction.f90 | 70 +++++ flang/test/Semantics/OpenMP/symbol08.f90 | 5 +- flang/test/Semantics/OpenMP/task-reduction.f90 | 70 +++++ flang/test/Semantics/OpenMP/taskgroup01.f90 | 2 + llvm/include/llvm/Frontend/OpenMP/OMP.td | 2 +- 16 files changed, 394 insertions(+), 191 deletions(-) create mode 100644 flang/test/Parser/OpenMP/task-reduction-clause.f90 create mode 100644 flang/test/Semantics/OpenMP/in-reduction.f90 create mode 100644 flang/test/Semantics/OpenMP/task-reduction.f90 diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h index 13825eb7ba41..6321ce02e78d 100644 --- a/flang/include/flang/Parser/dump-parse-tree.h +++ b/flang/include/flang/Parser/dump-parse-tree.h @@ -593,7 +593,10 @@ public: NODE(parser, OmpReductionClause) NODE(OmpReductionClause, Modifier) NODE(parser, OmpInReductionClause) + NODE(OmpInReductionClause, Modifier) NODE(parser, OmpReductionCombiner) + NODE(parser, OmpTaskReductionClause) + NODE(OmpTaskReductionClause, Modifier) NODE(OmpReductionCombiner, FunctionCombiner) NODE(parser, OmpReductionInitializerClause) NODE(parser, OmpReductionIdentifier) diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h index 2b4cb21017fa..db0d73fb6be1 100644 --- a/flang/include/flang/Parser/parse-tree.h +++ b/flang/include/flang/Parser/parse-tree.h @@ -3960,11 +3960,14 @@ struct OmpIfClause { std::tuple t; }; -// OMP 5.0 2.19.5.6 in_reduction-clause -> IN_REDUCTION (reduction-identifier: -// variable-name-list) +// Ref: [5.0:170-176], [5.1:197-205], [5.2:138-139] +// +// in-reduction-clause -> +// IN_REDUCTION(reduction-identifier: list) // since 5.0 struct OmpInReductionClause { TUPLE_CLASS_BOILERPLATE(OmpInReductionClause); - std::tuple t; + MODIFIER_BOILERPLATE(OmpReductionIdentifier); + std::tuple t; }; // Ref: [4.5:199-201], [5.0:288-290], [5.1:321-322], [5.2:115-117] @@ -4079,6 +4082,16 @@ struct OmpScheduleClause { std::tuple> t; }; +// Ref: [5.0:232-234], [5.1:264-266], [5.2:137] +// +// task-reduction-clause -> +// TASK_REDUCTION(reduction-identifier: list) // since 5.0 +struct OmpTaskReductionClause { + TUPLE_CLASS_BOILERPLATE(OmpTaskReductionClause); + MODIFIER_BOILERPLATE(OmpReductionIdentifier); + std::tuple t; +}; + // Ref: [4.5:107-109], [5.0:176-180], [5.1:205-210], [5.2:167-168] // // to-clause (in DECLARE TARGET) -> diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp index 10c31963ec49..a0dc1be0afc5 100644 --- a/flang/lib/Lower/OpenMP/Clauses.cpp +++ b/flang/lib/Lower/OpenMP/Clauses.cpp @@ -859,10 +859,14 @@ Init make(const parser::OmpClause::Init &inp, InReduction make(const parser::OmpClause::InReduction &inp, semantics::SemanticsContext &semaCtx) { // inp.v -> parser::OmpInReductionClause - auto &t0 = std::get(inp.v.t); + auto &mods = semantics::OmpGetModifiers(inp.v); + auto *m0 = + semantics::OmpGetUniqueModifier(mods); auto &t1 = std::get(inp.v.t); + assert(m0 && "OmpReductionIdentifier is required"); + return InReduction{ - {/*ReductionIdentifiers=*/{makeReductionOperator(t0, semaCtx)}, + {/*ReductionIdentifiers=*/{makeReductionOperator(*m0, semaCtx)}, /*List=*/makeObjects(t1, semaCtx)}}; } @@ -1155,17 +1159,17 @@ Reduction make(const parser::OmpClause::Reduction &inp, ); auto &mods = semantics::OmpGetModifiers(inp.v); - auto *t0 = + auto *m0 = semantics::OmpGetUniqueModifier(mods); - auto *t1 = + auto *m1 = semantics::OmpGetUniqueModifier(mods); - auto &t2 = std::get(inp.v.t); - assert(t1 && "OmpReductionIdentifier is required"); + auto &t1 = std::get(inp.v.t); + assert(m1 && "OmpReductionIdentifier is required"); return Reduction{ - {/*ReductionModifier=*/maybeApplyToV(convert, t0), - /*ReductionIdentifiers=*/{makeReductionOperator(*t1, semaCtx)}, - /*List=*/makeObjects(t2, semaCtx)}}; + {/*ReductionModifier=*/maybeApplyToV(convert, m0), + /*ReductionIdentifiers=*/{makeReductionOperator(*m1, semaCtx)}, + /*List=*/makeObjects(t1, semaCtx)}}; } // Relaxed: empty @@ -1259,13 +1263,13 @@ TaskReduction make(const parser::OmpClause::TaskReduction &inp, semantics::SemanticsContext &semaCtx) { // inp.v -> parser::OmpReductionClause auto &mods = semantics::OmpGetModifiers(inp.v); - auto *t0 = + auto *m0 = semantics::OmpGetUniqueModifier(mods); auto &t1 = std::get(inp.v.t); - assert(t0 && "OmpReductionIdentifier is required"); + assert(m0 && "OmpReductionIdentifier is required"); return TaskReduction{ - {/*ReductionIdentifiers=*/{makeReductionOperator(*t0, semaCtx)}, + {/*ReductionIdentifiers=*/{makeReductionOperator(*m0, semaCtx)}, /*List=*/makeObjects(t1, semaCtx)}}; } diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index f8fda92d5ac2..36d0a0240399 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -282,6 +282,9 @@ TYPE_PARSER(sourced( TYPE_PARSER(sourced(construct(OmpDirectiveNameParser{}))) +TYPE_PARSER(sourced(construct( + Parser{}))) + TYPE_PARSER(sourced(construct( Parser{}))) @@ -306,6 +309,9 @@ TYPE_PARSER(sourced(construct(sourced( construct(Parser{}) || construct(Parser{}))))) +TYPE_PARSER(sourced(construct( + Parser{}))) + TYPE_PARSER(sourced(construct( sourced(construct(Parser{}) || construct(Parser{}) || @@ -407,7 +413,12 @@ TYPE_PARSER(construct( // OMP 5.0 2.19.5.6 IN_REDUCTION (reduction-identifier: variable-name-list) TYPE_PARSER(construct( - Parser{} / ":", Parser{})) + maybe(nonemptyList(Parser{}) / ":"), + Parser{})) + +TYPE_PARSER(construct( + maybe(nonemptyList(Parser{}) / ":"), + Parser{})) // OMP 5.0 2.11.4 allocate-clause -> ALLOCATE ([allocator:] variable-name-list) // OMP 5.2 2.13.4 allocate-clause -> ALLOCATE ([allocate-modifier @@ -609,15 +620,15 @@ TYPE_PARSER( parenthesized(Parser{}))) || "PROC_BIND" >> construct(construct( parenthesized(Parser{}))) || - "REDUCTION" >> construct(construct( - parenthesized(Parser{}))) || + "REDUCTION"_id >> construct(construct( + parenthesized(Parser{}))) || "IN_REDUCTION" >> construct(construct( parenthesized(Parser{}))) || "DETACH" >> construct(construct( parenthesized(Parser{}))) || "TASK_REDUCTION" >> construct(construct( - parenthesized(Parser{}))) || + parenthesized(Parser{}))) || "RELAXED" >> construct(construct()) || "RELEASE" >> construct(construct()) || "REVERSE_OFFLOAD" >> diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp index a10be3f1c797..95985569eee8 100644 --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2143,13 +2143,18 @@ public: } void Unparse(const OmpReductionClause &x) { using Modifier = OmpReductionClause::Modifier; - Walk(std::get>>(x.t), ":"); + Walk(std::get>>(x.t), ": "); Walk(std::get(x.t)); } void Unparse(const OmpDetachClause &x) { Walk(x.v); } void Unparse(const OmpInReductionClause &x) { - Walk(std::get(x.t)); - Put(":"); + using Modifier = OmpInReductionClause::Modifier; + Walk(std::get>>(x.t), ": "); + Walk(std::get(x.t)); + } + void Unparse(const OmpTaskReductionClause &x) { + using Modifier = OmpTaskReductionClause::Modifier; + Walk(std::get>>(x.t), ": "); Walk(std::get(x.t)); } void Unparse(const OmpAllocateClause &x) { diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 1e78cf359a21..0c50e14620fe 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -2841,7 +2841,6 @@ CHECK_SIMPLE_CLAUSE(Grainsize, OMPC_grainsize) CHECK_SIMPLE_CLAUSE(Hint, OMPC_hint) CHECK_SIMPLE_CLAUSE(Holds, OMPC_holds) CHECK_SIMPLE_CLAUSE(Inclusive, OMPC_inclusive) -CHECK_SIMPLE_CLAUSE(InReduction, OMPC_in_reduction) CHECK_SIMPLE_CLAUSE(Match, OMPC_match) CHECK_SIMPLE_CLAUSE(Nontemporal, OMPC_nontemporal) CHECK_SIMPLE_CLAUSE(NumTasks, OMPC_num_tasks) @@ -2863,7 +2862,6 @@ CHECK_SIMPLE_CLAUSE(ProcBind, OMPC_proc_bind) CHECK_SIMPLE_CLAUSE(Simd, OMPC_simd) CHECK_SIMPLE_CLAUSE(Sizes, OMPC_sizes) CHECK_SIMPLE_CLAUSE(Permutation, OMPC_permutation) -CHECK_SIMPLE_CLAUSE(TaskReduction, OMPC_task_reduction) CHECK_SIMPLE_CLAUSE(Uniform, OMPC_uniform) CHECK_SIMPLE_CLAUSE(Unknown, OMPC_unknown) CHECK_SIMPLE_CLAUSE(Untied, OMPC_untied) @@ -2978,14 +2976,17 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Reduction &x) { if (OmpVerifyModifiers(x.v, llvm::omp::OMPC_reduction, GetContext().clauseSource, context_)) { - if (CheckReductionOperators(x)) { - CheckReductionTypeList(x); - } auto &modifiers{OmpGetModifiers(x.v)}; + const auto *ident{ + OmpGetUniqueModifier(modifiers)}; + assert(ident && "reduction-identifier is a required modifier"); + if (CheckReductionOperator(*ident, OmpGetModifierSource(modifiers, ident), + llvm::omp::OMPC_reduction)) { + CheckReductionObjectTypes(objects, *ident); + } using ReductionModifier = parser::OmpReductionModifier; - if (auto *maybeModifier{ - OmpGetUniqueModifier(modifiers)}) { - CheckReductionModifier(*maybeModifier); + if (auto *modifier{OmpGetUniqueModifier(modifiers)}) { + CheckReductionModifier(*modifier); } } CheckReductionObjects(objects, llvm::omp::Clause::OMPC_reduction); @@ -2997,70 +2998,88 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Reduction &x) { } } -bool OmpStructureChecker::CheckReductionOperators( - const parser::OmpClause::Reduction &x) { - bool ok = false; - auto &modifiers{OmpGetModifiers(x.v)}; - if (const auto *ident{ - OmpGetUniqueModifier(modifiers)}) { - - auto visitOperator{[&](const parser::DefinedOperator &dOpr) { - if (const auto *intrinsicOp{ - std::get_if( - &dOpr.u)}) { - ok = CheckIntrinsicOperator(*intrinsicOp); - } else { - context_.Say(GetContext().clauseSource, - "Invalid reduction operator in REDUCTION clause."_err_en_US, - ContextDirectiveAsFortran()); - } - }}; +void OmpStructureChecker::Enter(const parser::OmpClause::InReduction &x) { + CheckAllowedClause(llvm::omp::Clause::OMPC_in_reduction); + auto &objects{std::get(x.v.t)}; - auto visitDesignator{[&](const parser::ProcedureDesignator &procD) { - const parser::Name *name{std::get_if(&procD.u)}; - if (name && name->symbol) { - const SourceName &realName{name->symbol->GetUltimate().name()}; - if (realName == "max" || realName == "min" || realName == "iand" || - realName == "ior" || realName == "ieor") { - ok = true; - } - } - if (!ok) { + if (OmpVerifyModifiers(x.v, llvm::omp::OMPC_in_reduction, + GetContext().clauseSource, context_)) { + auto &modifiers{OmpGetModifiers(x.v)}; + const auto *ident{ + OmpGetUniqueModifier(modifiers)}; + assert(ident && "reduction-identifier is a required modifier"); + if (CheckReductionOperator(*ident, OmpGetModifierSource(modifiers, ident), + llvm::omp::OMPC_in_reduction)) { + CheckReductionObjectTypes(objects, *ident); + } + } + CheckReductionObjects(objects, llvm::omp::Clause::OMPC_in_reduction); +} + +void OmpStructureChecker::Enter(const parser::OmpClause::TaskReduction &x) { + CheckAllowedClause(llvm::omp::Clause::OMPC_task_reduction); + auto &objects{std::get(x.v.t)}; + + if (OmpVerifyModifiers(x.v, llvm::omp::OMPC_task_reduction, + GetContext().clauseSource, context_)) { + auto &modifiers{OmpGetModifiers(x.v)}; + const auto *ident{ + OmpGetUniqueModifier(modifiers)}; + assert(ident && "reduction-identifier is a required modifier"); + if (CheckReductionOperator(*ident, OmpGetModifierSource(modifiers, ident), + llvm::omp::OMPC_task_reduction)) { + CheckReductionObjectTypes(objects, *ident); + } + } + CheckReductionObjects(objects, llvm::omp::Clause::OMPC_task_reduction); +} + +bool OmpStructureChecker::CheckReductionOperator( + const parser::OmpReductionIdentifier &ident, parser::CharBlock source, + llvm::omp::Clause clauseId) { + auto visitOperator{[&](const parser::DefinedOperator &dOpr) { + if (const auto *intrinsicOp{ + std::get_if(&dOpr.u)}) { + switch (*intrinsicOp) { + case parser::DefinedOperator::IntrinsicOperator::Add: + case parser::DefinedOperator::IntrinsicOperator::Multiply: + case parser::DefinedOperator::IntrinsicOperator::AND: + case parser::DefinedOperator::IntrinsicOperator::OR: + case parser::DefinedOperator::IntrinsicOperator::EQV: + case parser::DefinedOperator::IntrinsicOperator::NEQV: + return true; + case parser::DefinedOperator::IntrinsicOperator::Subtract: context_.Say(GetContext().clauseSource, - "Invalid reduction identifier in REDUCTION " - "clause."_err_en_US, + "The minus reduction operator is deprecated since OpenMP 5.2 and is not supported in the REDUCTION clause."_err_en_US, ContextDirectiveAsFortran()); + return false; + default: + break; } - }}; - common::visit(common::visitors{visitOperator, visitDesignator}, ident->u); - } - - return ok; -} + } + context_.Say(source, "Invalid reduction operator in %s clause."_err_en_US, + parser::ToUpperCaseLetters(getClauseName(clauseId).str())); + return false; + }}; -bool OmpStructureChecker::CheckIntrinsicOperator( - const parser::DefinedOperator::IntrinsicOperator &op) { + auto visitDesignator{[&](const parser::ProcedureDesignator &procD) { + const parser::Name *name{std::get_if(&procD.u)}; + bool valid{false}; + if (name && name->symbol) { + const SourceName &realName{name->symbol->GetUltimate().name()}; + valid = + llvm::is_contained({"max", "min", "iand", "ior", "ieor"}, realName); + } + if (!valid) { + context_.Say(source, + "Invalid reduction identifier in %s clause."_err_en_US, + parser::ToUpperCaseLetters(getClauseName(clauseId).str())); + } + return valid; + }}; - switch (op) { - case parser::DefinedOperator::IntrinsicOperator::Add: - case parser::DefinedOperator::IntrinsicOperator::Multiply: - case parser::DefinedOperator::IntrinsicOperator::AND: - case parser::DefinedOperator::IntrinsicOperator::OR: - case parser::DefinedOperator::IntrinsicOperator::EQV: - case parser::DefinedOperator::IntrinsicOperator::NEQV: - return true; - case parser::DefinedOperator::IntrinsicOperator::Subtract: - context_.Say(GetContext().clauseSource, - "The minus reduction operator is deprecated since OpenMP 5.2 and is " - "not supported in the REDUCTION clause."_err_en_US, - ContextDirectiveAsFortran()); - break; - default: - context_.Say(GetContext().clauseSource, - "Invalid reduction operator in REDUCTION clause."_err_en_US, - ContextDirectiveAsFortran()); - } - return false; + return common::visit( + common::visitors{visitOperator, visitDesignator}, ident.u); } /// Check restrictions on objects that are common to all reduction clauses. @@ -3074,7 +3093,7 @@ void OmpStructureChecker::CheckReductionObjects( for (const parser::OmpObject &object : objects.v) { CheckIfContiguous(object); } - CheckReductionArraySection(objects); + CheckReductionArraySection(objects, clauseId); // An object must be definable. CheckDefinableObjects(symbols, clauseId); // Procedure pointers are not allowed. @@ -3127,100 +3146,82 @@ void OmpStructureChecker::CheckReductionObjects( } static bool IsReductionAllowedForType( - const parser::OmpClause::Reduction &x, const DeclTypeSpec &type) { - auto &modifiers{OmpGetModifiers(x.v)}; - const auto *definedOp{ - OmpGetUniqueModifier(modifiers)}; - if (!definedOp) { - return false; - } - // TODO: user defined reduction operators. Just allow everything for now. - bool ok{true}; - - auto IsLogical{[](const DeclTypeSpec &type) -> bool { + const parser::OmpReductionIdentifier &ident, const DeclTypeSpec &type) { + auto isLogical{[](const DeclTypeSpec &type) -> bool { return type.category() == DeclTypeSpec::Logical; }}; - auto IsCharacter{[](const DeclTypeSpec &type) -> bool { + auto isCharacter{[](const DeclTypeSpec &type) -> bool { return type.category() == DeclTypeSpec::Character; }}; - common::visit( - common::visitors{ - [&](const parser::DefinedOperator &dOpr) { - if (const auto *intrinsicOp{ - std::get_if( - &dOpr.u)}) { - // OMP5.2: The type [...] of a list item that appears in a - // reduction clause must be valid for the combiner expression - // See F2023: Table 10.2 - // .LT., .LE., .GT., .GE. are handled as procedure designators - // below. - switch (*intrinsicOp) { - case parser::DefinedOperator::IntrinsicOperator::Multiply: - [[fallthrough]]; - case parser::DefinedOperator::IntrinsicOperator::Add: - [[fallthrough]]; - case parser::DefinedOperator::IntrinsicOperator::Subtract: - ok = type.IsNumeric(TypeCategory::Integer) || - type.IsNumeric(TypeCategory::Real) || - type.IsNumeric(TypeCategory::Complex); - break; - - case parser::DefinedOperator::IntrinsicOperator::AND: - [[fallthrough]]; - case parser::DefinedOperator::IntrinsicOperator::OR: - [[fallthrough]]; - case parser::DefinedOperator::IntrinsicOperator::EQV: - [[fallthrough]]; - case parser::DefinedOperator::IntrinsicOperator::NEQV: - ok = IsLogical(type); - break; + auto checkOperator{[&](const parser::DefinedOperator &dOpr) { + if (const auto *intrinsicOp{ + std::get_if(&dOpr.u)}) { + // OMP5.2: The type [...] of a list item that appears in a + // reduction clause must be valid for the combiner expression + // See F2023: Table 10.2 + // .LT., .LE., .GT., .GE. are handled as procedure designators + // below. + switch (*intrinsicOp) { + case parser::DefinedOperator::IntrinsicOperator::Multiply: + case parser::DefinedOperator::IntrinsicOperator::Add: + case parser::DefinedOperator::IntrinsicOperator::Subtract: + return type.IsNumeric(TypeCategory::Integer) || + type.IsNumeric(TypeCategory::Real) || + type.IsNumeric(TypeCategory::Complex); + + case parser::DefinedOperator::IntrinsicOperator::AND: + case parser::DefinedOperator::IntrinsicOperator::OR: + case parser::DefinedOperator::IntrinsicOperator::EQV: + case parser::DefinedOperator::IntrinsicOperator::NEQV: + return isLogical(type); + + // Reduction identifier is not in OMP5.2 Table 5.2 + default: + DIE("This should have been caught in CheckIntrinsicOperator"); + return false; + } + } + return true; + }}; - // Reduction identifier is not in OMP5.2 Table 5.2 - default: - DIE("This should have been caught in CheckIntrinsicOperator"); - ok = false; - break; - } - } - }, - [&](const parser::ProcedureDesignator &procD) { - const parser::Name *name{std::get_if(&procD.u)}; - if (name && name->symbol) { - const SourceName &realName{name->symbol->GetUltimate().name()}; - // OMP5.2: The type [...] of a list item that appears in a - // reduction clause must be valid for the combiner expression - if (realName == "iand" || realName == "ior" || - realName == "ieor") { - // IAND: arguments must be integers: F2023 16.9.100 - // IEOR: arguments must be integers: F2023 16.9.106 - // IOR: arguments must be integers: F2023 16.9.111 - ok = type.IsNumeric(TypeCategory::Integer); - } else if (realName == "max" || realName == "min") { - // MAX: arguments must be integer, real, or character: - // F2023 16.9.135 - // MIN: arguments must be integer, real, or character: - // F2023 16.9.141 - ok = type.IsNumeric(TypeCategory::Integer) || - type.IsNumeric(TypeCategory::Real) || IsCharacter(type); - } - } - }, - }, - definedOp->u); + auto checkDesignator{[&](const parser::ProcedureDesignator &procD) { + const parser::Name *name{std::get_if(&procD.u)}; + if (name && name->symbol) { + const SourceName &realName{name->symbol->GetUltimate().name()}; + // OMP5.2: The type [...] of a list item that appears in a + // reduction clause must be valid for the combiner expression + if (realName == "iand" || realName == "ior" || realName == "ieor") { + // IAND: arguments must be integers: F2023 16.9.100 + // IEOR: arguments must be integers: F2023 16.9.106 + // IOR: arguments must be integers: F2023 16.9.111 + return type.IsNumeric(TypeCategory::Integer); + } else if (realName == "max" || realName == "min") { + // MAX: arguments must be integer, real, or character: + // F2023 16.9.135 + // MIN: arguments must be integer, real, or character: + // F2023 16.9.141 + return type.IsNumeric(TypeCategory::Integer) || + type.IsNumeric(TypeCategory::Real) || isCharacter(type); + } + } + // TODO: user defined reduction operators. Just allow everything for now. + return true; + }}; - return ok; + return common::visit( + common::visitors{checkOperator, checkDesignator}, ident.u); } -void OmpStructureChecker::CheckReductionTypeList( - const parser::OmpClause::Reduction &x) { - const auto &ompObjectList{std::get(x.v.t)}; +void OmpStructureChecker::CheckReductionObjectTypes( + const parser::OmpObjectList &objects, + const parser::OmpReductionIdentifier &ident) { SymbolSourceMap symbols; - GetSymbolsInObjectList(ompObjectList, symbols); + GetSymbolsInObjectList(objects, symbols); for (auto &[symbol, source] : symbols) { if (auto *type{symbol->GetType()}) { - if (!IsReductionAllowedForType(x, *type)) { + if (!IsReductionAllowedForType(ident, *type)) { context_.Say(source, "The type of '%s' is incompatible with the reduction operator."_err_en_US, symbol->name()); @@ -3283,13 +3284,12 @@ void OmpStructureChecker::CheckReductionModifier( } void OmpStructureChecker::CheckReductionArraySection( - const parser::OmpObjectList &ompObjectList) { + const parser::OmpObjectList &ompObjectList, llvm::omp::Clause clauseId) { for (const auto &ompObject : ompObjectList.v) { if (const auto *dataRef{parser::Unwrap(ompObject)}) { if (const auto *arrayElement{ parser::Unwrap(ompObject)}) { - CheckArraySection(*arrayElement, GetLastName(*dataRef), - llvm::omp::Clause::OMPC_reduction); + CheckArraySection(*arrayElement, GetLastName(*dataRef), clauseId); } } } diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h index e28e5f6d7b0d..f3592b2160fa 100644 --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -230,10 +230,10 @@ private: std::int64_t GetOrdCollapseLevel(const parser::OpenMPLoopConstruct &x); void CheckReductionObjects( const parser::OmpObjectList &objects, llvm::omp::Clause clauseId); - bool CheckReductionOperators(const parser::OmpClause::Reduction &); - bool CheckIntrinsicOperator( - const parser::DefinedOperator::IntrinsicOperator &); - void CheckReductionTypeList(const parser::OmpClause::Reduction &); + bool CheckReductionOperator(const parser::OmpReductionIdentifier &ident, + parser::CharBlock source, llvm::omp::Clause clauseId); + void CheckReductionObjectTypes(const parser::OmpObjectList &objects, + const parser::OmpReductionIdentifier &ident); void CheckReductionModifier(const parser::OmpReductionModifier &); void CheckMasterNesting(const parser::OpenMPBlockConstruct &x); void ChecksOnOrderedAsBlock(); @@ -241,7 +241,8 @@ private: void CheckScan(const parser::OpenMPSimpleStandaloneConstruct &x); void ChecksOnOrderedAsStandalone(); void CheckOrderedDependClause(std::optional orderedValue); - void CheckReductionArraySection(const parser::OmpObjectList &ompObjectList); + void CheckReductionArraySection( + const parser::OmpObjectList &ompObjectList, llvm::omp::Clause clauseId); void CheckArraySection(const parser::ArrayElement &arrayElement, const parser::Name &name, const llvm::omp::Clause clause); void CheckSharedBindingInOuterContext( diff --git a/flang/test/Parser/OpenMP/in-reduction-clause.f90 b/flang/test/Parser/OpenMP/in-reduction-clause.f90 index ab26ca2d9300..8a0bede62f03 100644 --- a/flang/test/Parser/OpenMP/in-reduction-clause.f90 +++ b/flang/test/Parser/OpenMP/in-reduction-clause.f90 @@ -5,16 +5,16 @@ subroutine omp_in_reduction_taskgroup() integer :: z, i - !CHECK: !$OMP TASKGROUP TASK_REDUCTION(+:z) + !CHECK: !$OMP TASKGROUP TASK_REDUCTION(+: z) !$omp taskgroup task_reduction(+:z) - !CHECK-NEXT: !$OMP TASK IN_REDUCTION(+:z) + !CHECK-NEXT: !$OMP TASK IN_REDUCTION(+: z) !$omp task in_reduction(+:z) !CHECK-NEXT: z=z+5_4 z = z + 5 !CHECK-NEXT: !$OMP END TASK !$omp end task - !CHECK-NEXT: !$OMP TASKLOOP IN_REDUCTION(+:z) + !CHECK-NEXT: !$OMP TASKLOOP IN_REDUCTION(+: z) !$omp taskloop in_reduction(+:z) !CHECK-NEXT: DO i=1_4,10_4 do i=1,10 @@ -31,7 +31,7 @@ end subroutine omp_in_reduction_taskgroup !PARSE-TREE: OpenMPConstruct -> OpenMPBlockConstruct !PARSE-TREE-NEXT: OmpBeginBlockDirective !PARSE-TREE-NEXT: OmpBlockDirective -> llvm::omp::Directive = taskgroup -!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> TaskReduction -> OmpReductionClause +!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> TaskReduction -> OmpTaskReductionClause !PARSE-TREE: OpenMPConstruct -> OpenMPBlockConstruct !PARSE-TREE-NEXT: OmpBeginBlockDirective @@ -49,9 +49,9 @@ end subroutine omp_in_reduction_taskgroup subroutine omp_in_reduction_parallel() integer :: z - !CHECK: !$OMP PARALLEL REDUCTION(+:z) + !CHECK: !$OMP PARALLEL REDUCTION(+: z) !$omp parallel reduction(+:z) - !CHECK-NEXT: !$OMP TASKLOOP SIMD IN_REDUCTION(+:z) + !CHECK-NEXT: !$OMP TASKLOOP SIMD IN_REDUCTION(+: z) !$omp taskloop simd in_reduction(+:z) !CHECK-NEXT: DO i=1_4,10_4 do i=1,10 diff --git a/flang/test/Parser/OpenMP/reduction-modifier.f90 b/flang/test/Parser/OpenMP/reduction-modifier.f90 index 64cd452e839e..56303af66395 100644 --- a/flang/test/Parser/OpenMP/reduction-modifier.f90 +++ b/flang/test/Parser/OpenMP/reduction-modifier.f90 @@ -4,7 +4,7 @@ subroutine foo() integer :: i, j j = 0 -! CHECK: !$OMP DO REDUCTION(TASK, *:j) +! CHECK: !$OMP DO REDUCTION(TASK, *: j) ! PARSE-TREE: | | ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPLoopConstruct ! PARSE-TREE: | | | OmpBeginLoopDirective ! PARSE-TREE: | | | | OmpLoopDirective -> llvm::omp::Directive = do diff --git a/flang/test/Parser/OpenMP/task-reduction-clause.f90 b/flang/test/Parser/OpenMP/task-reduction-clause.f90 new file mode 100644 index 000000000000..248ff7918dbe --- /dev/null +++ b/flang/test/Parser/OpenMP/task-reduction-clause.f90 @@ -0,0 +1,23 @@ +!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=50 %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s +!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=50 %s | FileCheck --check-prefix="PARSE-TREE" %s + +subroutine f00 + integer :: x +!$omp taskgroup task_reduction(+: x) + x = x + 1 +!$omp end taskgroup +end + +!UNPARSE: SUBROUTINE f00 +!UNPARSE: INTEGER x +!UNPARSE: !$OMP TASKGROUP TASK_REDUCTION(+: x) +!UNPARSE: x=x+1_4 +!UNPARSE: !$OMP END TASKGROUP +!UNPARSE: END SUBROUTINE + +!PARSE-TREE: OmpBeginBlockDirective +!PARSE-TREE: | OmpBlockDirective -> llvm::omp::Directive = taskgroup +!PARSE-TREE: | OmpClauseList -> OmpClause -> TaskReduction -> OmpTaskReductionClause +!PARSE-TREE: | | Modifier -> OmpReductionIdentifier -> DefinedOperator -> IntrinsicOperator = Add +!PARSE-TREE: | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'x' +!PARSE-TREE: Block diff --git a/flang/test/Preprocessing/directive-contin-with-pp.F90 b/flang/test/Preprocessing/directive-contin-with-pp.F90 index 544c6619f6b5..6e84c2bde52f 100644 --- a/flang/test/Preprocessing/directive-contin-with-pp.F90 +++ b/flang/test/Preprocessing/directive-contin-with-pp.F90 @@ -70,13 +70,13 @@ end module !CHECK: !DIR$ IGNORE_TKR x5 !CHECK: !DIR$ IGNORE_TKR x6 !CHECK: STOP 1_4 -!CHECK: !$OMP PARALLEL DO REDUCTION(+:x) +!CHECK: !$OMP PARALLEL DO REDUCTION(+: x) !CHECK: DO j1=1_4,n !CHECK: END DO -!CHECK: !$OMP PARALLEL DO REDUCTION(+:x) +!CHECK: !$OMP PARALLEL DO REDUCTION(+: x) !CHECK: DO j2=1_4,n !CHECK: END DO -!CHECK: !$OMP PARALLEL DO REDUCTION(+:x) +!CHECK: !$OMP PARALLEL DO REDUCTION(+: x) !CHECK: DO j3=1_4,n !CHECK: END DO !CHECK: END SUBROUTINE diff --git a/flang/test/Semantics/OpenMP/in-reduction.f90 b/flang/test/Semantics/OpenMP/in-reduction.f90 new file mode 100644 index 000000000000..1b82134b7104 --- /dev/null +++ b/flang/test/Semantics/OpenMP/in-reduction.f90 @@ -0,0 +1,70 @@ +!RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=50 + +subroutine f00 + real :: x +!ERROR: The type of 'x' is incompatible with the reduction operator. +!$omp target in_reduction(.or.: x) +!$omp end target +end + +subroutine f01 + real :: x +!ERROR: Invalid reduction operator in IN_REDUCTION clause. +!$omp target in_reduction(.not.: x) +!$omp end target +end + +subroutine f02(p) + integer, pointer, intent(in) :: p +!ERROR: Pointer 'p' with the INTENT(IN) attribute may not appear in a IN_REDUCTION clause +!$omp target in_reduction(+: p) +!$omp end target +end + +subroutine f03 + common /c/ a, b +!ERROR: Common block names are not allowed in IN_REDUCTION clause +!$omp target in_reduction(+: /c/) +!$omp end target +end + +subroutine f04 + integer :: x(10) +!ERROR: Reference to 'x' must be a contiguous object +!$omp target in_reduction(+: x(1:10:2)) +!$omp end target +end + +subroutine f05 + integer :: x(10) +!ERROR: 'x' in IN_REDUCTION clause is a zero size array section +!$omp target in_reduction(+: x(1:0)) +!$omp end target +end + +subroutine f06 + type t + integer :: a(10) + end type + type(t) :: x +!ERROR: The base expression of an array element or section in IN_REDUCTION clause must be an identifier +!$omp target in_reduction(+: x%a(2)) +!$omp end target +end + +subroutine f07 + type t + integer :: a(10) + end type + type(t) :: x +!ERROR: The base expression of an array element or section in IN_REDUCTION clause must be an identifier +!$omp target in_reduction(+: x%a(1:10)) +!$omp end target +end + +subroutine f08 + integer :: x +!ERROR: Type parameter inquiry is not permitted in IN_REDUCTION clause +!$omp target in_reduction(+: x%kind) +!$omp end target +end diff --git a/flang/test/Semantics/OpenMP/symbol08.f90 b/flang/test/Semantics/OpenMP/symbol08.f90 index 69ccd17391b5..80ae1c6d2242 100644 --- a/flang/test/Semantics/OpenMP/symbol08.f90 +++ b/flang/test/Semantics/OpenMP/symbol08.f90 @@ -130,13 +130,14 @@ subroutine dotprod (b, c, n, block_size, num_teams, block_threads) !REF: /dotprod/sum sum = 0.0e0 !$omp target map(to:b,c) map(tofrom:sum) -!$omp teams num_teams(num_teams) thread_limit(block_threads) reduction(+:sum) +!$omp teams num_teams(num_teams) thread_limit(block_threads) reduction(+: sum& +!$OMP&) !$omp distribute !DEF: /dotprod/OtherConstruct1/OtherConstruct1/OtherConstruct1/i0 (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4) !REF: /dotprod/n !REF: /dotprod/block_size do i0=1,n,block_size -!$omp parallel do reduction(+:sum) +!$omp parallel do reduction(+: sum) !DEF: /dotprod/OtherConstruct1/OtherConstruct1/OtherConstruct1/OtherConstruct1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4) !DEF: /dotprod/OtherConstruct1/OtherConstruct1/OtherConstruct1/OtherConstruct1/i0 HostAssoc INTEGER(4) !DEF: /dotprod/min ELEMENTAL, INTRINSIC, PURE (Function) ProcEntity diff --git a/flang/test/Semantics/OpenMP/task-reduction.f90 b/flang/test/Semantics/OpenMP/task-reduction.f90 new file mode 100644 index 000000000000..5a18ee48e772 --- /dev/null +++ b/flang/test/Semantics/OpenMP/task-reduction.f90 @@ -0,0 +1,70 @@ +!RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=50 + +subroutine f00 + real :: x +!ERROR: The type of 'x' is incompatible with the reduction operator. +!$omp taskgroup task_reduction(.or.: x) +!$omp end taskgroup +end + +subroutine f01 + real :: x +!ERROR: Invalid reduction operator in TASK_REDUCTION clause. +!$omp taskgroup task_reduction(.not.: x) +!$omp end taskgroup +end + +subroutine f02(p) + integer, pointer, intent(in) :: p +!ERROR: Pointer 'p' with the INTENT(IN) attribute may not appear in a TASK_REDUCTION clause +!$omp taskgroup task_reduction(+: p) +!$omp end taskgroup +end + +subroutine f03 + common /c/ a, b +!ERROR: Common block names are not allowed in TASK_REDUCTION clause +!$omp taskgroup task_reduction(+: /c/) +!$omp end taskgroup +end + +subroutine f04 + integer :: x(10) +!ERROR: Reference to 'x' must be a contiguous object +!$omp taskgroup task_reduction(+: x(1:10:2)) +!$omp end taskgroup +end + +subroutine f05 + integer :: x(10) +!ERROR: 'x' in TASK_REDUCTION clause is a zero size array section +!$omp taskgroup task_reduction(+: x(1:0)) +!$omp end taskgroup +end + +subroutine f06 + type t + integer :: a(10) + end type + type(t) :: x +!ERROR: The base expression of an array element or section in TASK_REDUCTION clause must be an identifier +!$omp taskgroup task_reduction(+: x%a(2)) +!$omp end taskgroup +end + +subroutine f07 + type t + integer :: a(10) + end type + type(t) :: x +!ERROR: The base expression of an array element or section in TASK_REDUCTION clause must be an identifier +!$omp taskgroup task_reduction(+: x%a(1:10)) +!$omp end taskgroup +end + +subroutine f08 + integer :: x +!ERROR: Type parameter inquiry is not permitted in TASK_REDUCTION clause +!$omp taskgroup task_reduction(+: x%kind) +!$omp end taskgroup +end diff --git a/flang/test/Semantics/OpenMP/taskgroup01.f90 b/flang/test/Semantics/OpenMP/taskgroup01.f90 index e05051387411..ded5d47525af 100644 --- a/flang/test/Semantics/OpenMP/taskgroup01.f90 +++ b/flang/test/Semantics/OpenMP/taskgroup01.f90 @@ -41,6 +41,8 @@ use omp_lib !$omp task !$omp taskgroup task_reduction(+ : reduction_var) print *, "The " + !ERROR: The type of 'reduction_var' is incompatible with the reduction operator. + !ERROR: The type of 'reduction_var' is incompatible with the reduction operator. !$omp taskgroup task_reduction(.or. : reduction_var) task_reduction(.and. : reduction_var) print *, "almighty sun" !$omp end taskgroup diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td index 772f60343c63..4f23a6792d63 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -464,7 +464,7 @@ def OMPC_Sizes: Clause<"sizes"> { } def OMPC_TaskReduction : Clause<"task_reduction"> { let clangClass = "OMPTaskReductionClause"; - let flangClass = "OmpReductionClause"; + let flangClass = "OmpTaskReductionClause"; } def OMPC_ThreadLimit : Clause<"thread_limit"> { let clangClass = "OMPThreadLimitClause"; -- cgit v1.2.3 From 03cbe42627c7a7940b47cc1a2cda0120bc9c6d5e Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Thu, 12 Dec 2024 12:19:35 -0600 Subject: [flang][OpenMP] Rework LINEAR clause (#119278) The OmpLinearClause class was a variant of two classes, one for when the linear modifier was present, and one for when it was absent. These two classes did not follow the conventions for parse tree nodes, (i.e. tuple/wrapper/union formats), which necessitated specialization of the parse tree visitor. The new form of OmpLinearClause is the standard tuple with a list of modifiers and an object list. The specialization of parse tree visitor for it has been removed. Parsing and unparsing of the new form bears additional complexity due to syntactical differences between OpenMP 5.2 and prior versions: in OpenMP 5.2 the argument list is post-modified, while in the prior versions, the step modifier was a post-modifier while the linear modifier had an unusual syntax of `modifier(list)`. With this change the LINEAR clause is no different from any other clauses in terms of its structure and use of modifiers. Modifier validation and all other checks work the same as with other clauses. --- flang/examples/FeatureList/FeatureList.cpp | 3 +- flang/include/flang/Parser/dump-parse-tree.h | 5 +- flang/include/flang/Parser/parse-tree-visitor.h | 34 ---- flang/include/flang/Parser/parse-tree.h | 56 ++++--- flang/include/flang/Semantics/openmp-modifiers.h | 2 + flang/lib/Lower/OpenMP/Clauses.cpp | 37 ++-- flang/lib/Parser/openmp-parsers.cpp | 63 ++++++- flang/lib/Parser/unparse.cpp | 62 ++++++- flang/lib/Semantics/check-omp-structure.cpp | 186 ++++++++++----------- flang/lib/Semantics/openmp-modifiers.cpp | 33 ++++ flang/lib/Semantics/resolve-directives.cpp | 15 +- flang/test/Parser/OpenMP/linear-clause.f90 | 117 +++++++++++++ flang/test/Semantics/OpenMP/clause-validity01.f90 | 8 + flang/test/Semantics/OpenMP/linear-clause01.f90 | 12 +- flang/test/Semantics/OpenMP/linear-clause02.f90 | 13 ++ flang/test/Semantics/OpenMP/linear-iter.f90 | 14 +- llvm/include/llvm/Frontend/OpenMP/ClauseT.h | 6 +- .../unittests/Frontend/OpenMPDecompositionTest.cpp | 15 +- 18 files changed, 448 insertions(+), 233 deletions(-) create mode 100644 flang/test/Parser/OpenMP/linear-clause.f90 create mode 100644 flang/test/Semantics/OpenMP/linear-clause02.f90 diff --git a/flang/examples/FeatureList/FeatureList.cpp b/flang/examples/FeatureList/FeatureList.cpp index 41a625520797..3a689c335c81 100644 --- a/flang/examples/FeatureList/FeatureList.cpp +++ b/flang/examples/FeatureList/FeatureList.cpp @@ -495,8 +495,7 @@ public: READ_FEATURE(OmpIfClause::Modifier) READ_FEATURE(OmpDirectiveNameModifier) READ_FEATURE(OmpLinearClause) - READ_FEATURE(OmpLinearClause::WithModifier) - READ_FEATURE(OmpLinearClause::WithoutModifier) + READ_FEATURE(OmpLinearClause::Modifier) READ_FEATURE(OmpLinearModifier) READ_FEATURE(OmpLinearModifier::Value) READ_FEATURE(OmpLoopDirective) diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h index 6321ce02e78d..7c0f04091362 100644 --- a/flang/include/flang/Parser/dump-parse-tree.h +++ b/flang/include/flang/Parser/dump-parse-tree.h @@ -559,10 +559,11 @@ public: NODE(parser, OmpLastprivateModifier) NODE_ENUM(OmpLastprivateModifier, Value) NODE(parser, OmpLinearClause) - NODE(OmpLinearClause, WithModifier) - NODE(OmpLinearClause, WithoutModifier) + NODE(OmpLinearClause, Modifier) NODE(parser, OmpLinearModifier) NODE_ENUM(OmpLinearModifier, Value) + NODE(parser, OmpStepComplexModifier) + NODE(parser, OmpStepSimpleModifier) NODE(parser, OmpLoopDirective) NODE(parser, OmpMapClause) NODE(OmpMapClause, Modifier) diff --git a/flang/include/flang/Parser/parse-tree-visitor.h b/flang/include/flang/Parser/parse-tree-visitor.h index e1ea4d459f4a..af1d34ae804f 100644 --- a/flang/include/flang/Parser/parse-tree-visitor.h +++ b/flang/include/flang/Parser/parse-tree-visitor.h @@ -897,40 +897,6 @@ struct ParseTreeVisitorLookupScope { mutator.Post(x); } } - template - static void Walk(const OmpLinearClause::WithModifier &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.modifier, visitor); - Walk(x.names, visitor); - Walk(x.step, visitor); - visitor.Post(x); - } - } - template - static void Walk(OmpLinearClause::WithModifier &x, M &mutator) { - if (mutator.Pre(x)) { - Walk(x.modifier, mutator); - Walk(x.names, mutator); - Walk(x.step, mutator); - mutator.Post(x); - } - } - template - static void Walk(const OmpLinearClause::WithoutModifier &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.names, visitor); - Walk(x.step, visitor); - visitor.Post(x); - } - } - template - static void Walk(OmpLinearClause::WithoutModifier &x, M &mutator) { - if (mutator.Pre(x)) { - Walk(x.names, mutator); - Walk(x.step, mutator); - mutator.Post(x); - } - } }; } // namespace detail diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h index db0d73fb6be1..8086c3103101 100644 --- a/flang/include/flang/Parser/parse-tree.h +++ b/flang/include/flang/Parser/parse-tree.h @@ -3699,6 +3699,22 @@ struct OmpReductionModifier { WRAPPER_CLASS_BOILERPLATE(OmpReductionModifier, Value); }; +// Ref: [5.2:117-120] +// +// step-complex-modifier -> +// STEP(integer-expression) // since 5.2 +struct OmpStepComplexModifier { + WRAPPER_CLASS_BOILERPLATE(OmpStepComplexModifier, ScalarIntExpr); +}; + +// Ref: [4.5:207-210], [5.0:290-293], [5.1:323-325], [5.2:117-120] +// +// step-simple-modifier -> +// integer-expresion // since 4.5 +struct OmpStepSimpleModifier { + WRAPPER_CLASS_BOILERPLATE(OmpStepSimpleModifier, ScalarIntExpr); +}; + // Ref: [4.5:169-170], [5.0:254-256], [5.1:287-289], [5.2:321] // // task-dependence-type -> // "dependence-type" in 5.1 and before @@ -3934,7 +3950,7 @@ struct OmpFailClause { struct OmpFromClause { TUPLE_CLASS_BOILERPLATE(OmpFromClause); MODIFIER_BOILERPLATE(OmpExpectation, OmpIterator, OmpMapper); - std::tuple t; + std::tuple t; }; // Ref: [4.5:87-91], [5.0:140-146], [5.1:166-171], [5.2:269] @@ -3981,28 +3997,20 @@ struct OmpLastprivateClause { std::tuple t; }; -// 2.15.3.7 linear-clause -> LINEAR (linear-list[ : linear-step]) -// linear-list -> list | linear-modifier(list) +// Ref: [4.5:207-210], [5.0:290-293], [5.1:323-325], [5.2:117-120] +// +// linear-clause -> +// LINEAR(list [: step-simple-modifier]) | // since 4.5 +// LINEAR(linear-modifier(list) +// [: step-simple-modifier]) | // since 4.5, until 5.2[*] +// LINEAR(list [: linear-modifier, +// step-complex-modifier]) // since 5.2 +// [*] Still allowed in 5.2 when on DECLARE SIMD, but deprecated. struct OmpLinearClause { - UNION_CLASS_BOILERPLATE(OmpLinearClause); - struct WithModifier { - BOILERPLATE(WithModifier); - WithModifier(OmpLinearModifier &&m, std::list &&n, - std::optional &&s) - : modifier(std::move(m)), names(std::move(n)), step(std::move(s)) {} - OmpLinearModifier modifier; - std::list names; - std::optional step; - }; - struct WithoutModifier { - BOILERPLATE(WithoutModifier); - WithoutModifier( - std::list &&n, std::optional &&s) - : names(std::move(n)), step(std::move(s)) {} - std::list names; - std::optional step; - }; - std::variant u; + TUPLE_CLASS_BOILERPLATE(OmpLinearClause); + MODIFIER_BOILERPLATE( + OmpLinearModifier, OmpStepSimpleModifier, OmpStepComplexModifier); + std::tuple t; }; // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158] @@ -4017,7 +4025,7 @@ struct OmpLinearClause { struct OmpMapClause { TUPLE_CLASS_BOILERPLATE(OmpMapClause); MODIFIER_BOILERPLATE(OmpMapTypeModifier, OmpMapper, OmpIterator, OmpMapType); - std::tuple t; + std::tuple t; }; // Ref: [4.5:87-91], [5.0:140-146], [5.1:166-171], [5.2:270] @@ -4105,7 +4113,7 @@ struct OmpTaskReductionClause { struct OmpToClause { TUPLE_CLASS_BOILERPLATE(OmpToClause); MODIFIER_BOILERPLATE(OmpExpectation, OmpIterator, OmpMapper); - std::tuple t; + std::tuple t; }; // Ref: [5.0:254-255], [5.1:287-288], [5.2:321-322] diff --git a/flang/include/flang/Semantics/openmp-modifiers.h b/flang/include/flang/Semantics/openmp-modifiers.h index 4025ce112d9c..5d5c5e97faf4 100644 --- a/flang/include/flang/Semantics/openmp-modifiers.h +++ b/flang/include/flang/Semantics/openmp-modifiers.h @@ -87,6 +87,8 @@ DECLARE_DESCRIPTOR(parser::OmpOrderingModifier); DECLARE_DESCRIPTOR(parser::OmpPrescriptiveness); DECLARE_DESCRIPTOR(parser::OmpReductionIdentifier); DECLARE_DESCRIPTOR(parser::OmpReductionModifier); +DECLARE_DESCRIPTOR(parser::OmpStepComplexModifier); +DECLARE_DESCRIPTOR(parser::OmpStepSimpleModifier); DECLARE_DESCRIPTOR(parser::OmpTaskDependenceType); DECLARE_DESCRIPTOR(parser::OmpVariableCategory); diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp index a0dc1be0afc5..b424e209d56d 100644 --- a/flang/lib/Lower/OpenMP/Clauses.cpp +++ b/flang/lib/Lower/OpenMP/Clauses.cpp @@ -899,8 +899,6 @@ Lastprivate make(const parser::OmpClause::Lastprivate &inp, Linear make(const parser::OmpClause::Linear &inp, semantics::SemanticsContext &semaCtx) { // inp.v -> parser::OmpLinearClause - using wrapped = parser::OmpLinearClause; - CLAUSET_ENUM_CONVERT( // convert, parser::OmpLinearModifier::Value, Linear::LinearModifier, // clang-format off @@ -910,26 +908,23 @@ Linear make(const parser::OmpClause::Linear &inp, // clang-format on ); - using Tuple = decltype(Linear::t); + auto &mods = semantics::OmpGetModifiers(inp.v); + auto *m0 = + semantics::OmpGetUniqueModifier(mods); + auto *m1 = + semantics::OmpGetUniqueModifier(mods); + assert((!m0 || !m1) && "Simple and complex modifiers both present"); - return Linear{Fortran::common::visit( - common::visitors{ - [&](const wrapped::WithModifier &s) -> Tuple { - return { - /*StepSimpleModifier=*/std::nullopt, - /*StepComplexModifier=*/maybeApply(makeExprFn(semaCtx), s.step), - /*LinearModifier=*/convert(s.modifier.v), - /*List=*/makeList(s.names, makeObjectFn(semaCtx))}; - }, - [&](const wrapped::WithoutModifier &s) -> Tuple { - return { - /*StepSimpleModifier=*/maybeApply(makeExprFn(semaCtx), s.step), - /*StepComplexModifier=*/std::nullopt, - /*LinearModifier=*/std::nullopt, - /*List=*/makeList(s.names, makeObjectFn(semaCtx))}; - }, - }, - inp.v.u)}; + auto *m2 = semantics::OmpGetUniqueModifier(mods); + auto &t1 = std::get(inp.v.t); + + auto &&maybeStep = m0 ? maybeApplyToV(makeExprFn(semaCtx), m0) + : m1 ? maybeApplyToV(makeExprFn(semaCtx), m1) + : std::optional{}; + + return Linear{{/*StepComplexModifier=*/std::move(maybeStep), + /*LinearModifier=*/maybeApplyToV(convert, m2), + /*List=*/makeObjects(t1, semaCtx)}}; } Link make(const parser::OmpClause::Link &inp, diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index 36d0a0240399..7d10de8c6097 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -99,6 +99,25 @@ constexpr ModifierList modifierList(Separator sep) { return ModifierList(sep); } +// Parse the input as any modifier from ClauseTy, but only succeed if +// the result was the SpecificTy. It requires that SpecificTy is one +// of the alternatives in ClauseTy::Modifier. +// The reason to have this is that ClauseTy::Modifier has "source", +// while specific modifiers don't. This class allows to parse a specific +// modifier together with obtaining its location. +template +struct SpecificModifierParser { + using resultType = typename ClauseTy::Modifier; + std::optional Parse(ParseState &state) const { + if (auto result{attempt(Parser{}).Parse(state)}) { + if (std::holds_alternative(result->u)) { + return result; + } + } + return std::nullopt; + } +}; + // OpenMP Clauses // [5.0] 2.1.6 iterator-specifier -> type-declaration-stmt = subscript-triple | @@ -232,6 +251,11 @@ TYPE_PARSER(construct( "TASK" >> pure(OmpReductionModifier::Value::Task) || "DEFAULT" >> pure(OmpReductionModifier::Value::Default))) +TYPE_PARSER(construct( // + "STEP" >> parenthesized(scalarIntExpr))) + +TYPE_PARSER(construct(scalarIntExpr)) + TYPE_PARSER(construct( "DEPOBJ" >> pure(OmpTaskDependenceType::Value::Depobj) || "IN"_id >> pure(OmpTaskDependenceType::Value::In) || @@ -288,6 +312,11 @@ TYPE_PARSER(sourced(construct( TYPE_PARSER(sourced(construct( Parser{}))) +TYPE_PARSER(sourced( + construct(Parser{}) || + construct(Parser{}) || + construct(Parser{}))) + TYPE_PARSER(sourced(construct( sourced(construct(Parser{}) || construct(Parser{}) || @@ -471,13 +500,33 @@ TYPE_PARSER(construct( applyFunction(makeMobClause, modifierList(maybe(","_tok)), Parser{}))) -TYPE_CONTEXT_PARSER("Omp LINEAR clause"_en_US, - construct( - construct(construct( - Parser{}, parenthesized(nonemptyList(name)), - maybe(":" >> scalarIntConstantExpr))) || - construct(construct( - nonemptyList(name), maybe(":" >> scalarIntConstantExpr))))) +OmpLinearClause makeLinearFromOldSyntax(OmpLinearClause::Modifier &&lm, + OmpObjectList &&objs, std::optional &&ssm) { + std::list mods; + mods.emplace_back(std::move(lm)); + if (ssm) { + mods.emplace_back(std::move(*ssm)); + } + return OmpLinearClause{std::move(objs), + mods.empty() ? decltype(mods){} : std::move(mods), + /*PostModified=*/false}; +} + +TYPE_PARSER( + // Parse the "modifier(x)" first, because syntacticaly it will match + // an array element (i.e. a list item). + // LINEAR(linear-modifier(list) [: step-simple-modifier]) + construct( // + applyFunction(makeLinearFromOldSyntax, + SpecificModifierParser{}, + parenthesized(Parser{}), + maybe(":"_tok >> SpecificModifierParser{}))) || + // LINEAR(list [: modifiers]) + construct( // + Parser{}, + maybe(":"_tok >> nonemptyList(Parser{})), + /*PostModified=*/pure(true))) // OpenMPv5.2 12.5.2 detach-clause -> DETACH (event-handle) TYPE_PARSER(construct(Parser{})) diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp index 95985569eee8..4b8e2624e36c 100644 --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2133,13 +2133,63 @@ public: Walk(std::get>>(x.t), ": "); Walk(std::get(x.t)); } - void Unparse(const OmpLinearClause::WithoutModifier &x) { - Walk(x.names, ", "); - Walk(":", x.step); + void Unparse(const OmpStepSimpleModifier &x) { Walk(x.v); } + void Unparse(const OmpStepComplexModifier &x) { + Word("STEP("); + Walk(x.v); + Put(")"); } - void Unparse(const OmpLinearClause::WithModifier &x) { - Walk(x.modifier), Put("("), Walk(x.names, ","), Put(")"); - Walk(":", x.step); + void Unparse(const OmpLinearClause &x) { + using Modifier = OmpLinearClause::Modifier; + auto &modifiers{std::get>>(x.t)}; + if (std::get(x.t)) { // PostModified + Walk(std::get(x.t)); + Walk(": ", modifiers); + } else { + // Unparse using pre-5.2 syntax. + bool HasStepModifier{false}, HasLinearModifier{false}; + + if (modifiers) { + bool NeedComma{false}; + for (const Modifier &m : *modifiers) { + // Print all linear modifiers in case we need to unparse an + // incorrect tree. + if (auto *lmod{std::get_if(&m.u)}) { + if (NeedComma) { + Put(","); + } + Walk(*lmod); + HasLinearModifier = true; + NeedComma = true; + } else { + // If not linear-modifier, then it has to be step modifier. + HasStepModifier = true; + } + } + } + + if (HasLinearModifier) { + Put("("); + } + Walk(std::get(x.t)); + if (HasLinearModifier) { + Put(")"); + } + + if (HasStepModifier) { + Put(": "); + bool NeedComma{false}; + for (const Modifier &m : *modifiers) { + if (!std::holds_alternative(m.u)) { + if (NeedComma) { + Put(","); + } + common::visit([&](auto &&s) { Walk(s); }, m.u); + NeedComma = true; + } + } + } + } } void Unparse(const OmpReductionClause &x) { using Modifier = OmpReductionClause::Modifier; diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 0c50e14620fe..d63f7a5aea3a 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -414,14 +414,14 @@ void OmpStructureChecker::CheckMultListItems() { // Linear clause for (auto [_, clause] : FindClauses(llvm::omp::Clause::OMPC_linear)) { - const auto &linearClause{std::get(clause->u)}; + auto &linearClause{std::get(clause->u)}; std::list nameList; - common::visit( - [&](const auto &u) { - std::copy( - u.names.begin(), u.names.end(), std::back_inserter(nameList)); - }, - linearClause.v.u); + SymbolSourceMap symbols; + GetSymbolsInObjectList( + std::get(linearClause.v.t), symbols); + llvm::transform(symbols, std::back_inserter(nameList), [&](auto &&pair) { + return parser::Name{pair.second, const_cast(pair.first)}; + }); CheckMultipleOccurrence(listVars, nameList, clause->source, "LINEAR"); } } @@ -958,28 +958,13 @@ void OmpStructureChecker::CheckDistLinear( const auto &beginLoopDir{std::get(x.t)}; const auto &clauses{std::get(beginLoopDir.t)}; - semantics::UnorderedSymbolSet indexVars; + SymbolSourceMap indexVars; // Collect symbols of all the variables from linear clauses - for (const auto &clause : clauses.v) { - if (const auto *linearClause{ - std::get_if(&clause.u)}) { - - std::list values; - // Get the variant type - if (std::holds_alternative( - linearClause->v.u)) { - const auto &withM{ - std::get(linearClause->v.u)}; - values = withM.names; - } else { - const auto &withOutM{std::get( - linearClause->v.u)}; - values = withOutM.names; - } - for (auto const &v : values) { - indexVars.insert(*(v.symbol)); - } + for (auto &clause : clauses.v) { + if (auto *linearClause{std::get_if(&clause.u)}) { + auto &objects{std::get(linearClause->v.t)}; + GetSymbolsInObjectList(objects, indexVars); } } @@ -999,8 +984,8 @@ void OmpStructureChecker::CheckDistLinear( if (loop->IsDoNormal()) { const parser::Name &itrVal{GetLoopIndex(loop)}; if (itrVal.symbol) { - // Remove the symbol from the collcted set - indexVars.erase(*(itrVal.symbol)); + // Remove the symbol from the collected set + indexVars.erase(&itrVal.symbol->GetUltimate()); } collapseVal--; if (collapseVal == 0) { @@ -1016,12 +1001,10 @@ void OmpStructureChecker::CheckDistLinear( } // Show error for the remaining variables - for (auto var : indexVars) { - const Symbol &root{GetAssociationRoot(var)}; - context_.Say(parser::FindSourceLocation(x), - "Variable '%s' not allowed in `LINEAR` clause, only loop iterator " - "can be specified in `LINEAR` clause of a construct combined with " - "`DISTRIBUTE`"_err_en_US, + for (auto &[symbol, source] : indexVars) { + const Symbol &root{GetAssociationRoot(*symbol)}; + context_.Say(source, + "Variable '%s' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE"_err_en_US, root.name()); } } @@ -3669,17 +3652,63 @@ void OmpStructureChecker::Enter(const parser::OmpClause::If &x) { void OmpStructureChecker::Enter(const parser::OmpClause::Linear &x) { CheckAllowedClause(llvm::omp::Clause::OMPC_linear); + unsigned version{context_.langOptions().OpenMPVersion}; + llvm::omp::Directive dir{GetContext().directive}; + parser::CharBlock clauseSource{GetContext().clauseSource}; + const parser::OmpLinearModifier *linearMod{nullptr}; - parser::CharBlock source{GetContext().clauseSource}; - // 2.7 Loop Construct Restriction - if ((llvm::omp::allDoSet | llvm::omp::allSimdSet) - .test(GetContext().directive)) { - if (std::holds_alternative(x.v.u)) { + SymbolSourceMap symbols; + auto &objects{std::get(x.v.t)}; + GetSymbolsInObjectList(objects, symbols); + + auto CheckIntegerNoRef{[&](const Symbol *symbol, parser::CharBlock source) { + if (!symbol->GetType()->IsNumeric(TypeCategory::Integer)) { + auto &desc{OmpGetDescriptor()}; context_.Say(source, - "A modifier may not be specified in a LINEAR clause " - "on the %s directive"_err_en_US, - ContextDirectiveAsFortran()); - return; + "The list item '%s' specified without the REF '%s' must be of INTEGER type"_err_en_US, + symbol->name(), desc.name.str()); + } + }}; + + if (OmpVerifyModifiers(x.v, llvm::omp::OMPC_linear, clauseSource, context_)) { + auto &modifiers{OmpGetModifiers(x.v)}; + linearMod = OmpGetUniqueModifier(modifiers); + if (linearMod) { + // 2.7 Loop Construct Restriction + if ((llvm::omp::allDoSet | llvm::omp::allSimdSet).test(dir)) { + context_.Say(clauseSource, + "A modifier may not be specified in a LINEAR clause on the %s directive"_err_en_US, + ContextDirectiveAsFortran()); + return; + } + + auto &desc{OmpGetDescriptor()}; + for (auto &[symbol, source] : symbols) { + if (linearMod->v != parser::OmpLinearModifier::Value::Ref) { + CheckIntegerNoRef(symbol, source); + } else { + if (!IsAllocatable(*symbol) && !IsAssumedShape(*symbol) && + !IsPolymorphic(*symbol)) { + context_.Say(source, + "The list item `%s` specified with the REF '%s' must be polymorphic variable, assumed-shape array, or a variable with the `ALLOCATABLE` attribute"_err_en_US, + symbol->name(), desc.name.str()); + } + } + if (linearMod->v == parser::OmpLinearModifier::Value::Ref || + linearMod->v == parser::OmpLinearModifier::Value::Uval) { + if (!IsDummy(*symbol) || IsValue(*symbol)) { + context_.Say(source, + "If the `%s` is REF or UVAL, the list item '%s' must be a dummy argument without the VALUE attribute"_err_en_US, + desc.name.str(), symbol->name()); + } + } + } // for (symbol, source) + + if (version >= 52 && !std::get(x.v.t)) { + context_.Say(OmpGetModifierSource(modifiers, linearMod), + "The 'modifier()' syntax is deprecated in %s, use ' : modifier' instead"_warn_en_US, + ThisVersion(version)); + } } } @@ -3692,73 +3721,28 @@ void OmpStructureChecker::Enter(const parser::OmpClause::Linear &x) { } } - auto checkForValidLinearClause_01 = [&](const parser::Name &name, - bool is_ref) { - std::string listItemName{name.ToString()}; - if (!is_ref && !name.symbol->GetType()->IsNumeric(TypeCategory::Integer)) { - context_.Say(source, - "The list item `%s` specified with other than linear-modifier `REF` must be of type INTEGER"_err_en_US, - listItemName); + // OpenMP 5.2: Linear clause Restrictions + for (auto &[symbol, source] : symbols) { + if (!linearMod) { + // Already checked this with the modifier present. + CheckIntegerNoRef(symbol, source); } - if (GetContext().directive == llvm::omp::Directive::OMPD_declare_simd && - !IsDummy(*name.symbol)) { + if (dir == llvm::omp::Directive::OMPD_declare_simd && !IsDummy(*symbol)) { context_.Say(source, "The list item `%s` must be a dummy argument"_err_en_US, - listItemName); + symbol->name()); } - if (IsPointer(*name.symbol) || - name.symbol->test(Symbol::Flag::CrayPointer)) { + if (IsPointer(*symbol) || symbol->test(Symbol::Flag::CrayPointer)) { context_.Say(source, "The list item `%s` in a LINEAR clause must not be Cray Pointer or a variable with POINTER attribute"_err_en_US, - listItemName); + symbol->name()); } - if (FindCommonBlockContaining(*name.symbol)) { + if (FindCommonBlockContaining(*symbol)) { context_.Say(source, "'%s' is a common block name and must not appear in an LINEAR clause"_err_en_US, - listItemName); - } - }; - - auto checkForValidLinearClause_02 = [&](const parser::Name &name, - const parser::OmpLinearModifier::Value - &modifierValue) { - std::string listItemName{name.ToString()}; - checkForValidLinearClause_01( - name, (modifierValue == parser::OmpLinearModifier::Value::Ref)); - if (modifierValue != parser::OmpLinearModifier::Value::Val && - IsDummy(*name.symbol) && IsValue(*name.symbol)) { - context_.Say(source, - "The list item `%s` specified with the linear-modifier `REF` or `UVAL` must be a dummy argument without `VALUE` attribute"_err_en_US, - listItemName); - } - if (modifierValue == parser::OmpLinearModifier::Value::Ref && - !(IsAllocatable(*name.symbol) || IsAssumedShape(*name.symbol) || - IsPolymorphic(*name.symbol))) { - context_.Say(source, - "The list item `%s` specified with the linear-modifier `REF` must be polymorphic variable, assumed-shape array, or a variable with the `ALLOCATABLE` attribute"_err_en_US, - listItemName); + symbol->name()); } - }; - - // OpenMP 5.2: Linear clause Restrictions - common::visit( - common::visitors{ - [&](const parser::OmpLinearClause::WithoutModifier &withoutModifier) { - for (const auto &name : withoutModifier.names) { - if (name.symbol) { - checkForValidLinearClause_01(name, false); - } - } - }, - [&](const parser::OmpLinearClause::WithModifier &withModifier) { - for (const auto &name : withModifier.names) { - if (name.symbol) { - checkForValidLinearClause_02(name, withModifier.modifier.v); - } - } - }, - }, - x.v.u); + } } void OmpStructureChecker::CheckAllowedMapTypes( diff --git a/flang/lib/Semantics/openmp-modifiers.cpp b/flang/lib/Semantics/openmp-modifiers.cpp index f8f81e6c6ffa..9f2896229bb7 100644 --- a/flang/lib/Semantics/openmp-modifiers.cpp +++ b/flang/lib/Semantics/openmp-modifiers.cpp @@ -407,6 +407,39 @@ const OmpModifierDescriptor &OmpGetDescriptor() { return desc; } +template <> +const OmpModifierDescriptor & +OmpGetDescriptor() { + static const OmpModifierDescriptor desc{ + /*name=*/"step-complex-modifier", + /*props=*/ + { + {52, {OmpProperty::Unique}}, + }, + /*clauses=*/ + { + {52, {Clause::OMPC_linear}}, + }, + }; + return desc; +} + +template <> +const OmpModifierDescriptor &OmpGetDescriptor() { + static const OmpModifierDescriptor desc{ + /*name=*/"step-simple-modifier", + /*props=*/ + { + {45, {OmpProperty::Unique, OmpProperty::Exclusive}}, + }, + /*clauses=*/ + { + {45, {Clause::OMPC_linear}}, + }, + }; + return desc; +} + template <> const OmpModifierDescriptor &OmpGetDescriptor() { static const OmpModifierDescriptor desc{ diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp index 80a086acebba..39478b58a907 100644 --- a/flang/lib/Semantics/resolve-directives.cpp +++ b/flang/lib/Semantics/resolve-directives.cpp @@ -502,19 +502,8 @@ public: return false; } bool Pre(const parser::OmpLinearClause &x) { - common::visit(common::visitors{ - [&](const parser::OmpLinearClause::WithoutModifier - &linearWithoutModifier) { - ResolveOmpNameList(linearWithoutModifier.names, - Symbol::Flag::OmpLinear); - }, - [&](const parser::OmpLinearClause::WithModifier - &linearWithModifier) { - ResolveOmpNameList( - linearWithModifier.names, Symbol::Flag::OmpLinear); - }, - }, - x.u); + auto &objects{std::get(x.t)}; + ResolveOmpObjectList(objects, Symbol::Flag::OmpLinear); return false; } diff --git a/flang/test/Parser/OpenMP/linear-clause.f90 b/flang/test/Parser/OpenMP/linear-clause.f90 new file mode 100644 index 000000000000..5f031b069414 --- /dev/null +++ b/flang/test/Parser/OpenMP/linear-clause.f90 @@ -0,0 +1,117 @@ +!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=52 %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s +!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=52 %s | FileCheck --check-prefix="PARSE-TREE" %s + +subroutine f00(x) + integer :: x + !$omp do linear(x) + do x = 1, 10 + enddo + !$omp end do +end + +!UNPARSE: SUBROUTINE f00 (x) +!UNPARSE: INTEGER x +!UNPARSE: !$OMP DO LINEAR(x) +!UNPARSE: DO x=1_4,10_4 +!UNPARSE: END DO +!UNPARSE: !$OMP END DO +!UNPARSE: END SUBROUTINE + +!PARSE-TREE: OmpBeginLoopDirective +!PARSE-TREE: | OmpLoopDirective -> llvm::omp::Directive = do +!PARSE-TREE: | OmpClauseList -> OmpClause -> Linear -> OmpLinearClause +!PARSE-TREE: | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'x' +!PARSE-TREE: | | bool = 'true' +!PARSE-TREE: DoConstruct + +subroutine f01(x) + integer :: x + !$omp do linear(x : 2) + do x = 1, 10 + enddo + !$omp end do +end + +!UNPARSE: SUBROUTINE f01 (x) +!UNPARSE: INTEGER x +!UNPARSE: !$OMP DO LINEAR(x: 2_4) +!UNPARSE: DO x=1_4,10_4 +!UNPARSE: END DO +!UNPARSE: !$OMP END DO +!UNPARSE: END SUBROUTINE + +!PARSE-TREE: OmpBeginLoopDirective +!PARSE-TREE: | OmpLoopDirective -> llvm::omp::Directive = do +!PARSE-TREE: | OmpClauseList -> OmpClause -> Linear -> OmpLinearClause +!PARSE-TREE: | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'x' +!PARSE-TREE: | | Modifier -> OmpStepSimpleModifier -> Scalar -> Integer -> Expr = '2_4' +!PARSE-TREE: | | | LiteralConstant -> IntLiteralConstant = '2' +!PARSE-TREE: | | bool = 'true' +!PARSE-TREE: DoConstruct + +subroutine f02(x) + integer :: x + !$omp do linear(x : step(3)) + do x = 1, 10 + enddo + !$omp end do +end + +!UNPARSE: SUBROUTINE f02 (x) +!UNPARSE: INTEGER x +!UNPARSE: !$OMP DO LINEAR(x: STEP(3_4)) +!UNPARSE: DO x=1_4,10_4 +!UNPARSE: END DO +!UNPARSE: !$OMP END DO +!UNPARSE: END SUBROUTINE + +!PARSE-TREE: OmpBeginLoopDirective +!PARSE-TREE: | OmpLoopDirective -> llvm::omp::Directive = do +!PARSE-TREE: | OmpClauseList -> OmpClause -> Linear -> OmpLinearClause +!PARSE-TREE: | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'x' +!PARSE-TREE: | | Modifier -> OmpStepComplexModifier -> Scalar -> Integer -> Expr = '3_4' +!PARSE-TREE: | | | LiteralConstant -> IntLiteralConstant = '3' +!PARSE-TREE: | | bool = 'true' +!PARSE-TREE: DoConstruct + +subroutine f03(x) + integer :: x + !$omp declare simd linear(x : uval) +end + +!UNPARSE: SUBROUTINE f03 (x) +!UNPARSE: INTEGER x +!UNPARSE: !$OMP DECLARE SIMD LINEAR(x: UVAL) +!UNPARSE: END SUBROUTINE + +!PARSE-TREE: SpecificationPart +![...] +!PARSE-TREE: | DeclarationConstruct -> SpecificationConstruct -> OpenMPDeclarativeConstruct -> OpenMPDeclareSimdConstruct +!PARSE-TREE: | | Verbatim +!PARSE-TREE: | | OmpClauseList -> OmpClause -> Linear -> OmpLinearClause +!PARSE-TREE: | | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'x' +!PARSE-TREE: | | | Modifier -> OmpLinearModifier -> Value = Uval +!PARSE-TREE: | | | bool = 'true' +!PARSE-TREE: ExecutionPart -> Block + +subroutine f04(x) + integer :: x + !$omp declare simd linear(x : uval, step(3)) +end + +!UNPARSE: SUBROUTINE f04 (x) +!UNPARSE: INTEGER x +!UNPARSE: !$OMP DECLARE SIMD LINEAR(x: UVAL, STEP(3_4)) +!UNPARSE: END SUBROUTINE + +!PARSE-TREE: SpecificationPart +![...] +!PARSE-TREE: | DeclarationConstruct -> SpecificationConstruct -> OpenMPDeclarativeConstruct -> OpenMPDeclareSimdConstruct +!PARSE-TREE: | | Verbatim +!PARSE-TREE: | | OmpClauseList -> OmpClause -> Linear -> OmpLinearClause +!PARSE-TREE: | | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'x' +!PARSE-TREE: | | | Modifier -> OmpLinearModifier -> Value = Uval +!PARSE-TREE: | | | Modifier -> OmpStepComplexModifier -> Scalar -> Integer -> Expr = '3_4' +!PARSE-TREE: | | | | LiteralConstant -> IntLiteralConstant = '3' +!PARSE-TREE: | | | bool = 'true' +!PARSE-TREE: ExecutionPart -> Block diff --git a/flang/test/Semantics/OpenMP/clause-validity01.f90 b/flang/test/Semantics/OpenMP/clause-validity01.f90 index 66e11e4b540f..e8114154a809 100644 --- a/flang/test/Semantics/OpenMP/clause-validity01.f90 +++ b/flang/test/Semantics/OpenMP/clause-validity01.f90 @@ -221,11 +221,19 @@ use omp_lib !ERROR: Clause LINEAR is not allowed if clause ORDERED appears on the DO directive !ERROR: The parameter of the ORDERED clause must be a constant positive integer expression + !ERROR: 'b' appears in more than one data-sharing clause on the same OpenMP directive !$omp do ordered(1-1) private(b) linear(b) linear(a) do i = 1, N a = 3.14 enddo + !ERROR: Clause LINEAR is not allowed if clause ORDERED appears on the DO directive + !ERROR: The parameter of the ORDERED clause must be a constant positive integer expression + !$omp do ordered(1-1) linear(a) + do i = 1, N + a = 3.14 + enddo + !ERROR: The parameter of the ORDERED clause must be greater than or equal to the parameter of the COLLAPSE clause !$omp do collapse(num-14) ordered(1) do i = 1, N diff --git a/flang/test/Semantics/OpenMP/linear-clause01.f90 b/flang/test/Semantics/OpenMP/linear-clause01.f90 index 654aa07f5bd4..f95e834c9026 100644 --- a/flang/test/Semantics/OpenMP/linear-clause01.f90 +++ b/flang/test/Semantics/OpenMP/linear-clause01.f90 @@ -16,25 +16,31 @@ end subroutine linear_clause_01 ! Case 2 subroutine linear_clause_02(arg_01, arg_02) - !ERROR: The list item `arg_01` specified with other than linear-modifier `REF` must be of type INTEGER + !ERROR: The list item 'arg_01' specified without the REF 'linear-modifier' must be of INTEGER type !$omp declare simd linear(val(arg_01)) real, intent(in) :: arg_01(:) - !ERROR: The list item `arg_02` specified with the linear-modifier `REF` or `UVAL` must be a dummy argument without `VALUE` attribute + !ERROR: The list item 'arg_02' specified without the REF 'linear-modifier' must be of INTEGER type + !ERROR: If the `linear-modifier` is REF or UVAL, the list item 'arg_02' must be a dummy argument without the VALUE attribute !$omp declare simd linear(uval(arg_02)) + !ERROR: The type of 'arg_02' has already been implicitly declared integer, value, intent(in) :: arg_02 + !ERROR: The list item 'var' specified without the REF 'linear-modifier' must be of INTEGER type + !ERROR: If the `linear-modifier` is REF or UVAL, the list item 'var' must be a dummy argument without the VALUE attribute !ERROR: The list item `var` must be a dummy argument !ERROR: The list item `var` in a LINEAR clause must not be Cray Pointer or a variable with POINTER attribute !$omp declare simd linear(uval(var)) + !ERROR: The type of 'var' has already been implicitly declared integer, pointer :: var end subroutine linear_clause_02 ! Case 3 subroutine linear_clause_03(arg) integer, intent(in) :: arg - !ERROR: The list item `arg` specified with the linear-modifier `REF` must be polymorphic variable, assumed-shape array, or a variable with the `ALLOCATABLE` attribute + !ERROR: The list item `arg` specified with the REF 'linear-modifier' must be polymorphic variable, assumed-shape array, or a variable with the `ALLOCATABLE` attribute !ERROR: List item 'arg' present at multiple LINEAR clauses + !ERROR: 'arg' appears in more than one data-sharing clause on the same OpenMP directive !$omp declare simd linear(ref(arg)) linear(arg) integer :: i diff --git a/flang/test/Semantics/OpenMP/linear-clause02.f90 b/flang/test/Semantics/OpenMP/linear-clause02.f90 new file mode 100644 index 000000000000..695d61715820 --- /dev/null +++ b/flang/test/Semantics/OpenMP/linear-clause02.f90 @@ -0,0 +1,13 @@ +!RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=52 + +subroutine f00(x) + integer :: x + !WARNING: The 'modifier()' syntax is deprecated in OpenMP v5.2, use ' : modifier' instead + !$omp declare simd linear(uval(x)) +end + +subroutine f01(x) + integer :: x + !ERROR: An exclusive 'step-simple-modifier' modifier cannot be specified together with a modifier of a different type + !$omp declare simd linear(uval(x) : 2) +end diff --git a/flang/test/Semantics/OpenMP/linear-iter.f90 b/flang/test/Semantics/OpenMP/linear-iter.f90 index 8102c1a03cd3..1f40228be92a 100644 --- a/flang/test/Semantics/OpenMP/linear-iter.f90 +++ b/flang/test/Semantics/OpenMP/linear-iter.f90 @@ -20,7 +20,7 @@ SUBROUTINE LINEAR_BAD(N) !$omp target !$omp teams - !ERROR: Variable 'j' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` + !ERROR: Variable 'j' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE !$omp distribute parallel do simd linear(j) do i = 1, N a = 3.14 @@ -31,8 +31,8 @@ SUBROUTINE LINEAR_BAD(N) !$omp target !$omp teams - !ERROR: Variable 'j' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` - !ERROR: Variable 'b' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` + !ERROR: Variable 'j' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE + !ERROR: Variable 'b' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE !$omp distribute parallel do simd linear(j) linear(b) do i = 1, N a = 3.14 @@ -43,8 +43,8 @@ SUBROUTINE LINEAR_BAD(N) !$omp target !$omp teams - !ERROR: Variable 'j' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` - !ERROR: Variable 'b' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` + !ERROR: Variable 'j' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE + !ERROR: Variable 'b' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE !$omp distribute parallel do simd linear(j, b) do i = 1, N a = 3.14 @@ -54,7 +54,7 @@ SUBROUTINE LINEAR_BAD(N) !$omp end target !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. - !ERROR: Variable 'j' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` + !ERROR: Variable 'j' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE !$omp distribute simd linear(i,j) do i = 1, N do j = 1, N @@ -64,7 +64,7 @@ SUBROUTINE LINEAR_BAD(N) !$omp end distribute simd !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. - !ERROR: Variable 'j' not allowed in `LINEAR` clause, only loop iterator can be specified in `LINEAR` clause of a construct combined with `DISTRIBUTE` + !ERROR: Variable 'j' not allowed in LINEAR clause, only loop iterator can be specified in LINEAR clause of a construct combined with DISTRIBUTE !$omp distribute simd linear(i,j) collapse(1) do i = 1, N do j = 1, N diff --git a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h index 67632fb79f8a..3e22b6ff71c8 100644 --- a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h +++ b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h @@ -758,15 +758,13 @@ template // struct LinearT { // std::get won't work here due to duplicate types in the tuple. using List = ObjectListT; - using StepSimpleModifier = E; + // StepSimpleModifier is same as StepComplexModifier. using StepComplexModifier = E; ENUM(LinearModifier, Ref, Val, Uval); using TupleTrait = std::true_type; // Step == nullopt means 1. - std::tuple - t; + std::tuple t; }; // V5.2: [5.8.5] `link` clause diff --git a/llvm/unittests/Frontend/OpenMPDecompositionTest.cpp b/llvm/unittests/Frontend/OpenMPDecompositionTest.cpp index 8f195c4f6032..d218de225c36 100644 --- a/llvm/unittests/Frontend/OpenMPDecompositionTest.cpp +++ b/llvm/unittests/Frontend/OpenMPDecompositionTest.cpp @@ -748,8 +748,7 @@ TEST_F(OpenMPDecompositionTest, Allocate3) { // Allocate + linear omp::List Clauses{ {OMPC_allocate, omp::clause::Allocate{{std::nullopt, std::nullopt, {x}}}}, - {OMPC_linear, - omp::clause::Linear{{std::nullopt, std::nullopt, std::nullopt, {x}}}}, + {OMPC_linear, omp::clause::Linear{{std::nullopt, std::nullopt, {x}}}}, }; omp::ConstructDecomposition Dec(AnyVersion, Helper, OMPD_parallel_for, @@ -761,7 +760,7 @@ TEST_F(OpenMPDecompositionTest, Allocate3) { // The "shared" clause is duplicated---this isn't harmful, but it // should be fixed eventually. ASSERT_EQ(Dir0, "parallel shared(x) shared(x)"); // (33) - ASSERT_EQ(Dir1, "for linear(, , , (x)) firstprivate(x) lastprivate(, (x)) " + ASSERT_EQ(Dir1, "for linear(, , (x)) firstprivate(x) lastprivate(, (x)) " "allocate(, , (x))"); // (33) } @@ -1059,8 +1058,7 @@ TEST_F(OpenMPDecompositionTest, Linear1) { omp::Object x{"x"}; omp::List Clauses{ - {OMPC_linear, - omp::clause::Linear{{std::nullopt, std::nullopt, std::nullopt, {x}}}}, + {OMPC_linear, omp::clause::Linear{{std::nullopt, std::nullopt, {x}}}}, }; omp::ConstructDecomposition Dec(AnyVersion, Helper, OMPD_for_simd, Clauses); @@ -1068,7 +1066,7 @@ TEST_F(OpenMPDecompositionTest, Linear1) { std::string Dir0 = stringify(Dec.output[0]); std::string Dir1 = stringify(Dec.output[1]); ASSERT_EQ(Dir0, "for firstprivate(x) lastprivate(, (x))"); // (15.1), (15.2) - ASSERT_EQ(Dir1, "simd linear(, , , (x)) lastprivate(, (x))"); // (15.1) + ASSERT_EQ(Dir1, "simd linear(, , (x)) lastprivate(, (x))"); // (15.1) } // NOWAIT @@ -1102,13 +1100,12 @@ TEST_F(OpenMPDecompositionTest, Nowait1) { TEST_F(OpenMPDecompositionTest, Misc1) { omp::Object x{"x"}; omp::List Clauses{ - {OMPC_linear, - omp::clause::Linear{{std::nullopt, std::nullopt, std::nullopt, {x}}}}, + {OMPC_linear, omp::clause::Linear{{std::nullopt, std::nullopt, {x}}}}, }; omp::ConstructDecomposition Dec(AnyVersion, Helper, OMPD_simd, Clauses); ASSERT_EQ(Dec.output.size(), 1u); std::string Dir0 = stringify(Dec.output[0]); - ASSERT_EQ(Dir0, "simd linear(, , , (x)) lastprivate(, (x))"); + ASSERT_EQ(Dir0, "simd linear(, , (x)) lastprivate(, (x))"); } } // namespace -- cgit v1.2.3 From 2546ae4ed09ff69274c184ae7e98f2aa72e7e7f7 Mon Sep 17 00:00:00 2001 From: Han-Kuan Chen Date: Fri, 13 Dec 2024 02:22:41 +0800 Subject: [SLP][REVEC] Fix the number of elements in the mask of a ShuffleVectorInst is not a power of 2. (#119689) The following shufflevector should not be vectorized when slp-vectorize-non-power-of-2 is enabled. shufflevector <8 x float> %1, <8 x float> poison, <3 x i32> shufflevector <8 x float> %1, <8 x float> poison, <3 x i32> --- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 2 + llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll | 99 ++++++++++++++++++++++- 2 files changed, 100 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index dd4db2e54733..0e11e8704db2 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -344,6 +344,8 @@ static unsigned getShufflevectorNumGroups(ArrayRef VL) { unsigned SVNumElements = cast(SV->getOperand(0)->getType())->getNumElements(); unsigned ShuffleMaskSize = SV->getShuffleMask().size(); + if (SVNumElements % ShuffleMaskSize != 0) + return 0; unsigned GroupSize = SVNumElements / ShuffleMaskSize; if (GroupSize == 0 || (VL.size() % GroupSize) != 0) return 0; diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll index b312688b7932..61ff4f5766d3 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -mtriple=riscv64 -mcpu=sifive-x280 -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 %s | FileCheck %s +; RUN: opt -mtriple=riscv64 -mcpu=sifive-x280 -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 %s | FileCheck --check-prefixes=CHECK,POWEROF2 %s +; RUN: opt -mtriple=riscv64 -mcpu=sifive-x280 -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 -slp-vectorize-non-power-of-2 %s | FileCheck --check-prefixes=CHECK,NONPOWEROF2 %s define i32 @test() { ; CHECK-LABEL: @test( @@ -134,3 +135,99 @@ for.body: %6 = select <2 x i1> %4, <2 x float> %3, <2 x float> zeroinitializer br label %for.cond.cleanup } + +define ptr @test4() { +; POWEROF2-LABEL: @test4( +; POWEROF2-NEXT: [[TMP1:%.*]] = fadd <8 x float> zeroinitializer, zeroinitializer +; POWEROF2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <2 x i32> +; POWEROF2-NEXT: [[TMP3:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <2 x i32> +; POWEROF2-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <2 x i32> +; POWEROF2-NEXT: [[TMP5:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> poison, <2 x float> [[TMP2]], i64 0) +; POWEROF2-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> [[TMP5]], <2 x float> [[TMP3]], i64 2) +; POWEROF2-NEXT: br label [[TMP8:%.*]] +; POWEROF2: 7: +; POWEROF2-NEXT: br label [[TMP8]] +; POWEROF2: 8: +; POWEROF2-NEXT: [[TMP9:%.*]] = phi <2 x float> [ poison, [[TMP7:%.*]] ], [ [[TMP4]], [[TMP0:%.*]] ] +; POWEROF2-NEXT: [[TMP10:%.*]] = phi <4 x float> [ poison, [[TMP7]] ], [ [[TMP6]], [[TMP0]] ] +; POWEROF2-NEXT: br label [[TMP11:%.*]] +; POWEROF2: 11: +; POWEROF2-NEXT: [[TMP12:%.*]] = call <2 x float> @llvm.vector.extract.v2f32.v4f32(<4 x float> [[TMP10]], i64 0) +; POWEROF2-NEXT: [[TMP13:%.*]] = fmul <2 x float> [[TMP12]], zeroinitializer +; POWEROF2-NEXT: [[TMP14:%.*]] = call <2 x float> @llvm.vector.extract.v2f32.v4f32(<4 x float> [[TMP10]], i64 2) +; POWEROF2-NEXT: [[TMP15:%.*]] = fmul <2 x float> zeroinitializer, [[TMP14]] +; POWEROF2-NEXT: [[TMP16:%.*]] = extractelement <2 x float> [[TMP9]], i32 1 +; POWEROF2-NEXT: [[TMP17:%.*]] = fmul float 0.000000e+00, [[TMP16]] +; POWEROF2-NEXT: [[TMP18:%.*]] = extractelement <2 x float> [[TMP9]], i32 0 +; POWEROF2-NEXT: [[TMP19:%.*]] = fmul float [[TMP18]], 0.000000e+00 +; POWEROF2-NEXT: [[TMP20:%.*]] = extractelement <2 x float> [[TMP13]], i32 0 +; POWEROF2-NEXT: [[TMP21:%.*]] = fadd reassoc nsz float [[TMP20]], [[TMP17]] +; POWEROF2-NEXT: [[TMP22:%.*]] = extractelement <2 x float> [[TMP15]], i32 0 +; POWEROF2-NEXT: [[TMP23:%.*]] = fadd reassoc nsz float [[TMP22]], [[TMP19]] +; POWEROF2-NEXT: [[TMP24:%.*]] = extractelement <2 x float> [[TMP13]], i32 1 +; POWEROF2-NEXT: [[TMP25:%.*]] = fadd reassoc nsz float [[TMP21]], [[TMP24]] +; POWEROF2-NEXT: [[TMP26:%.*]] = extractelement <2 x float> [[TMP15]], i32 1 +; POWEROF2-NEXT: [[TMP27:%.*]] = fadd reassoc nsz float [[TMP23]], [[TMP26]] +; POWEROF2-NEXT: [[TMP28:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP25]]) +; POWEROF2-NEXT: [[TMP29:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP27]]) +; POWEROF2-NEXT: ret ptr null +; +; NONPOWEROF2-LABEL: @test4( +; NONPOWEROF2-NEXT: [[TMP1:%.*]] = fadd <8 x float> zeroinitializer, zeroinitializer +; NONPOWEROF2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <3 x i32> +; NONPOWEROF2-NEXT: [[TMP3:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <3 x i32> +; NONPOWEROF2-NEXT: [[TMP4:%.*]] = call <6 x float> @llvm.vector.insert.v6f32.v3f32(<6 x float> poison, <3 x float> [[TMP2]], i64 0) +; NONPOWEROF2-NEXT: [[TMP5:%.*]] = call <6 x float> @llvm.vector.insert.v6f32.v3f32(<6 x float> [[TMP4]], <3 x float> [[TMP3]], i64 3) +; NONPOWEROF2-NEXT: br label [[TMP7:%.*]] +; NONPOWEROF2: 6: +; NONPOWEROF2-NEXT: br label [[TMP7]] +; NONPOWEROF2: 7: +; NONPOWEROF2-NEXT: [[TMP8:%.*]] = phi <6 x float> [ poison, [[TMP6:%.*]] ], [ [[TMP5]], [[TMP0:%.*]] ] +; NONPOWEROF2-NEXT: br label [[TMP9:%.*]] +; NONPOWEROF2: 9: +; NONPOWEROF2-NEXT: [[TMP10:%.*]] = call <3 x float> @llvm.vector.extract.v3f32.v6f32(<6 x float> [[TMP8]], i64 0) +; NONPOWEROF2-NEXT: [[TMP11:%.*]] = fmul <3 x float> zeroinitializer, [[TMP10]] +; NONPOWEROF2-NEXT: [[TMP12:%.*]] = call <3 x float> @llvm.vector.extract.v3f32.v6f32(<6 x float> [[TMP8]], i64 3) +; NONPOWEROF2-NEXT: [[TMP13:%.*]] = fmul <3 x float> zeroinitializer, [[TMP12]] +; NONPOWEROF2-NEXT: [[TMP14:%.*]] = call reassoc nsz float @llvm.vector.reduce.fadd.v3f32(float 0.000000e+00, <3 x float> [[TMP11]]) +; NONPOWEROF2-NEXT: [[TMP15:%.*]] = call reassoc nsz float @llvm.vector.reduce.fadd.v3f32(float 0.000000e+00, <3 x float> [[TMP13]]) +; NONPOWEROF2-NEXT: [[TMP16:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP14]]) +; NONPOWEROF2-NEXT: [[TMP17:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP15]]) +; NONPOWEROF2-NEXT: ret ptr null +; + %1 = fadd <8 x float> zeroinitializer, zeroinitializer + %2 = extractelement <8 x float> %1, i64 0 + %3 = extractelement <8 x float> %1, i64 1 + %4 = extractelement <8 x float> %1, i64 2 + %5 = extractelement <8 x float> %1, i64 4 + %6 = extractelement <8 x float> %1, i64 5 + %7 = extractelement <8 x float> %1, i64 6 + br label %9 + +8: + br label %9 + +9: + %10 = phi float [ 0.000000e+00, %8 ], [ %7, %0 ] + %11 = phi float [ 0.000000e+00, %8 ], [ %6, %0 ] + %12 = phi float [ 0.000000e+00, %8 ], [ %5, %0 ] + %13 = phi float [ 0.000000e+00, %8 ], [ %4, %0 ] + %14 = phi float [ 0.000000e+00, %8 ], [ %3, %0 ] + %15 = phi float [ 0.000000e+00, %8 ], [ %2, %0 ] + br label %16 + +16: + %17 = fmul float %14, 0.000000e+00 + %18 = fmul float 0.000000e+00, %11 + %19 = fmul float 0.000000e+00, %15 + %20 = fmul float %12, 0.000000e+00 + %21 = fadd reassoc nsz float %17, %19 + %22 = fadd reassoc nsz float %18, %20 + %23 = fmul float %13, 0.000000e+00 + %24 = fmul float %10, 0.000000e+00 + %25 = fadd reassoc nsz float %21, %23 + %26 = fadd reassoc nsz float %22, %24 + %27 = tail call float @llvm.sqrt.f32(float %25) + %28 = tail call float @llvm.sqrt.f32(float %26) + ret ptr null +} -- cgit v1.2.3 From 139e69b7bcb05e6ff9db0f373d9180deb341a571 Mon Sep 17 00:00:00 2001 From: Slava Zakharin Date: Thu, 12 Dec 2024 10:38:34 -0800 Subject: [flang] Simple folding for hlfir.shape_of. (#119649) This folding makes sure there are no hlfir.shape_of users of hlfir.elemental - this may enable more InlineElementals matches, because it is looking for exactly two uses of an hlfir.elemental. --- flang/include/flang/Optimizer/HLFIR/HLFIROps.td | 1 + flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp | 9 +++++++++ flang/test/HLFIR/shapeof.fir | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/flang/include/flang/Optimizer/HLFIR/HLFIROps.td b/flang/include/flang/Optimizer/HLFIR/HLFIROps.td index f11162dc0d95..48764580d526 100644 --- a/flang/include/flang/Optimizer/HLFIR/HLFIROps.td +++ b/flang/include/flang/Optimizer/HLFIR/HLFIROps.td @@ -1205,6 +1205,7 @@ def hlfir_ShapeOfOp : hlfir_Op<"shape_of", [Pure]> { }]; let builders = [OpBuilder<(ins "mlir::Value":$expr)>]; + let hasFolder = 1; } def hlfir_GetExtentOp : hlfir_Op<"get_extent", [Pure]> { diff --git a/flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp b/flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp index ad53527f4344..82aac7cafa1d 100644 --- a/flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp +++ b/flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp @@ -1704,6 +1704,15 @@ hlfir::ShapeOfOp::canonicalize(ShapeOfOp shapeOf, return llvm::LogicalResult::success(); } +mlir::OpFoldResult hlfir::ShapeOfOp::fold(FoldAdaptor adaptor) { + if (matchPattern(getExpr(), mlir::m_Op())) { + auto elementalOp = + mlir::cast(getExpr().getDefiningOp()); + return elementalOp.getShape(); + } + return {}; +} + //===----------------------------------------------------------------------===// // GetExtent //===----------------------------------------------------------------------===// diff --git a/flang/test/HLFIR/shapeof.fir b/flang/test/HLFIR/shapeof.fir index b91efc276b62..43e22dd320c1 100644 --- a/flang/test/HLFIR/shapeof.fir +++ b/flang/test/HLFIR/shapeof.fir @@ -27,3 +27,21 @@ func.func @shapeof2(%arg0: !hlfir.expr) -> !fir.shape<2> { // CHECK-ALL: %[[EXPR:.*]]: !hlfir.expr // CHECK-ALL-NEXT: %[[SHAPE:.*]] = hlfir.shape_of %[[EXPR]] : (!hlfir.expr) -> !fir.shape<2> // CHECK-ALL-NEXT: return %[[SHAPE]] + +// Checks hlfir.elemental -> hlfir.shape_of folding +func.func @shapeof_fold1(%extent: index) -> !fir.shape<1> { + %shape1 = fir.shape %extent : (index) -> !fir.shape<1> + %elem = hlfir.elemental %shape1 : (!fir.shape<1>) -> !hlfir.expr { + hlfir.yield_element %extent : index + } + %shape2 = hlfir.shape_of %elem : (!hlfir.expr) -> !fir.shape<1> + return %shape2 : !fir.shape<1> +} +// CHECK-ALL-LABEL: func.func @shapeof_fold1( +// CHECK-ALL-SAME: %[[VAL_0:.*]]: index) -> !fir.shape<1> { +// CHECK-CANON-NEXT: %[[VAL_1:.*]] = fir.shape %[[VAL_0]] : (index) -> !fir.shape<1> +// CHECK-CANON-NEXT: %[[VAL_2:.*]] = hlfir.elemental %[[VAL_1]] : (!fir.shape<1>) -> !hlfir.expr { +// CHECK-CANON-NEXT: hlfir.yield_element %[[VAL_0]] : index +// CHECK-CANON-NEXT: } +// CHECK-CANON-NEXT: return %[[VAL_1]] : !fir.shape<1> +// CHECK-CANON-NEXT: } -- cgit v1.2.3 From c047a5b3f6e2295dd74f1e8f17f1a023150b246c Mon Sep 17 00:00:00 2001 From: Nick Desaulniers Date: Thu, 12 Dec 2024 10:49:55 -0800 Subject: [libc][docgen] simplify posix links (#119595) Usually posix functions have individual doc pages, and each header has its own list of required macro definitions. Use a simpler key of "in-latest-posix" to signal that the URL convention can be followed. Add support for a "removed-in-posix-2008" key which will link to the 2004 docs for functions like bcmp, bcopy, bzero, index, and rindex from strings.h. I don't want to add all of these links for pthreads.h, so automating this will make documenting these go much faster. --- libc/docs/headers/assert.rst | 4 +- libc/docs/headers/ctype.rst | 58 +++++++++++++++++- libc/docs/headers/errno.rst | 10 ++-- libc/docs/headers/fenv.rst | 52 ++++++++-------- libc/docs/headers/float.rst | 76 +++++++++++------------ libc/docs/headers/inttypes.rst | 14 ++--- libc/docs/headers/locale.rst | 36 ++++++++--- libc/docs/headers/signal.rst | 92 ++++++++++++++-------------- libc/docs/headers/stdlib.rst | 90 ++++++++++++++-------------- libc/docs/headers/string.rst | 64 +++++++++++--------- libc/docs/headers/strings.rst | 26 ++++---- libc/docs/headers/threads.rst | 62 ++++++++++--------- libc/docs/headers/uchar.rst | 12 ++-- libc/docs/headers/wchar.rst | 4 +- libc/docs/headers/wctype.rst | 2 +- libc/utils/docgen/assert.json | 3 +- libc/utils/docgen/ctype.json | 85 +++++++++++++++++++++----- libc/utils/docgen/docgen.py | 34 +++++++---- libc/utils/docgen/errno.json | 12 ++-- libc/utils/docgen/fenv.json | 68 ++++++++++++++------- libc/utils/docgen/float.json | 114 +++++++++++++++++++++++------------ libc/utils/docgen/inttypes.json | 18 ++++-- libc/utils/docgen/locale.json | 39 +++++++++--- libc/utils/docgen/setjmp.json | 12 +++- libc/utils/docgen/signal.json | 90 ++++++++++++++-------------- libc/utils/docgen/stdlib.json | 129 ++++++++++++++++++++++++++-------------- libc/utils/docgen/string.json | 87 ++++++++++++++++++--------- libc/utils/docgen/strings.json | 24 ++++---- libc/utils/docgen/threads.json | 84 +++++++++++++++++--------- libc/utils/docgen/uchar.json | 12 ++-- 30 files changed, 889 insertions(+), 524 deletions(-) diff --git a/libc/docs/headers/assert.rst b/libc/docs/headers/assert.rst index 06ea27966de1..682170755ba4 100644 --- a/libc/docs/headers/assert.rst +++ b/libc/docs/headers/assert.rst @@ -15,7 +15,7 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - __STDC_VERSION_ASSERT_H__ - |check| - 7.2.1 @@ -23,5 +23,5 @@ Macros * - assert - - 7.2.1 - - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/ctype.rst b/libc/docs/headers/ctype.rst index e506830809f7..9b5b1574fd27 100644 --- a/libc/docs/headers/ctype.rst +++ b/libc/docs/headers/ctype.rst @@ -15,60 +15,116 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - isalnum - |check| - 7.4.1.1 + - `POSIX.1-2024 `__ + * - isalnum_l + - |check| - + - `POSIX.1-2024 `__ * - isalpha - |check| - 7.4.1.2 + - `POSIX.1-2024 `__ + * - isalpha_l + - |check| - + - `POSIX.1-2024 `__ * - isblank - |check| - 7.4.1.3 + - `POSIX.1-2024 `__ + * - isblank_l + - |check| - + - `POSIX.1-2024 `__ * - iscntrl - |check| - 7.4.1.4 + - `POSIX.1-2024 `__ + * - iscntrl_l + - |check| - + - `POSIX.1-2024 `__ * - isdigit - |check| - 7.4.1.5 + - `POSIX.1-2024 `__ + * - isdigit_l + - |check| - + - `POSIX.1-2024 `__ * - isgraph - |check| - 7.4.1.6 + - `POSIX.1-2024 `__ + * - isgraph_l + - |check| - + - `POSIX.1-2024 `__ * - islower - |check| - 7.4.1.7 + - `POSIX.1-2024 `__ + * - islower_l + - |check| - + - `POSIX.1-2024 `__ * - isprint - |check| - 7.4.1.8 + - `POSIX.1-2024 `__ + * - isprint_l + - |check| - + - `POSIX.1-2024 `__ * - ispunct - |check| - 7.4.1.9 + - `POSIX.1-2024 `__ + * - ispunct_l + - |check| - + - `POSIX.1-2024 `__ * - isspace - |check| - 7.4.1.10 + - `POSIX.1-2024 `__ + * - isspace_l + - |check| - + - `POSIX.1-2024 `__ * - isupper - |check| - 7.4.1.11 + - `POSIX.1-2024 `__ + * - isupper_l + - |check| - + - `POSIX.1-2024 `__ * - isxdigit - |check| - 7.4.1.12 + - `POSIX.1-2024 `__ + * - isxdigit_l + - |check| - + - `POSIX.1-2024 `__ * - tolower - |check| - 7.4.2.1 + - `POSIX.1-2024 `__ + * - tolower_l + - |check| - + - `POSIX.1-2024 `__ * - toupper - |check| - 7.4.2.2 + - `POSIX.1-2024 `__ + * - toupper_l + - |check| - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/errno.rst b/libc/docs/headers/errno.rst index f25aae4f23b2..b2b2e62728e1 100644 --- a/libc/docs/headers/errno.rst +++ b/libc/docs/headers/errno.rst @@ -15,21 +15,21 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - EDOM - - 7.5 - - + - `POSIX.1-2024 `__ * - EILSEQ - - 7.5 - - + - `POSIX.1-2024 `__ * - ERANGE - - 7.5 - - + - `POSIX.1-2024 `__ * - errno - - 7.5 - - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/fenv.rst b/libc/docs/headers/fenv.rst index 374b46ef57be..d0e3c5dda6d0 100644 --- a/libc/docs/headers/fenv.rst +++ b/libc/docs/headers/fenv.rst @@ -15,11 +15,11 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - FE_ALL_EXCEPT - |check| - 7.6.12 - - + - `POSIX.1-2024 `__ * - FE_DEC_DOWNWARD - - 7.6.14 @@ -43,7 +43,7 @@ Macros * - FE_DFL_ENV - |check| - 7.6.17 - - + - `POSIX.1-2024 `__ * - FE_DFL_MODE - - 7.6.11 @@ -51,27 +51,27 @@ Macros * - FE_DIVBYZERO - |check| - 7.6.9 - - - * - FE_DOWNARD - - + - `POSIX.1-2024 `__ + * - FE_DOWNWARD + - |check| - 7.6.13 - - + - `POSIX.1-2024 `__ * - FE_INEXACT - |check| - 7.6.9 - - + - `POSIX.1-2024 `__ * - FE_INVALID - |check| - 7.6.9 - - + - `POSIX.1-2024 `__ * - FE_OVERFLOW - |check| - 7.6.9 - - + - `POSIX.1-2024 `__ * - FE_TONEAREST - |check| - 7.6.13 - - + - `POSIX.1-2024 `__ * - FE_TONEARESTFROMZERO - - 7.6.13 @@ -79,15 +79,15 @@ Macros * - FE_TOWARDZERO - |check| - 7.6.13 - - + - `POSIX.1-2024 `__ * - FE_UNDERFLOW - |check| - 7.6.9 - - + - `POSIX.1-2024 `__ * - FE_UPWARD - |check| - 7.6.13 - - + - `POSIX.1-2024 `__ * - __STDC_VERSION_FENV_H__ - - 7.6.5 @@ -104,7 +104,7 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - fe_dec_getround - - 7.6.5.3 @@ -116,15 +116,15 @@ Functions * - feclearexcept - |check| - 7.6.4.1 - - + - `POSIX.1-2024 `__ * - fegetenv - |check| - 7.6.6.1 - - + - `POSIX.1-2024 `__ * - fegetexceptflag - |check| - 7.6.4.2 - - + - `POSIX.1-2024 `__ * - fegetmode - - 7.6.5.1 @@ -132,19 +132,19 @@ Functions * - fegetround - |check| - 7.6.5.2 - - + - `POSIX.1-2024 `__ * - feholdexcept - |check| - 7.6.6.2 - - + - `POSIX.1-2024 `__ * - feraiseexcept - |check| - 7.6.4.3 - - + - `POSIX.1-2024 `__ * - fesetenv - |check| - 7.6.6.3 - - + - `POSIX.1-2024 `__ * - fesetexcept - |check| - 7.6.4.4 @@ -152,7 +152,7 @@ Functions * - fesetexceptflag - |check| - 7.6.4.5 - - + - `POSIX.1-2024 `__ * - fesetmode - - 7.6.5.4 @@ -160,11 +160,11 @@ Functions * - fesetround - |check| - 7.6.5.5 - - + - `POSIX.1-2024 `__ * - fetestexcept - |check| - 7.6.4.7 - - + - `POSIX.1-2024 `__ * - fetestexceptflag - |check| - 7.6.4.6 @@ -172,4 +172,4 @@ Functions * - feupdateenv - |check| - 7.6.6.4 - - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/float.rst b/libc/docs/headers/float.rst index b603867fcef9..8ef0f3a05020 100644 --- a/libc/docs/headers/float.rst +++ b/libc/docs/headers/float.rst @@ -15,23 +15,23 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - DBL_DECIMAL_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_EPSILON - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_HAS_SUBNORM - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_IS_IEC_60559 - - 5.3.5.3.3 @@ -43,27 +43,27 @@ Macros * - DBL_MAX - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_MAX_10_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_MAX_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_MIN - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_MIN_10_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_MIN_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DBL_NORM_MAX - - 5.3.5.3.3 @@ -75,31 +75,31 @@ Macros * - DBL_TRUE_MIN - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - DECIMAL_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_DECIMAL_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_EPSILON - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_EVAL_METHOD - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_HAS_SUBNORM - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_IS_IEC_60559 - - 5.3.5.3.3 @@ -111,27 +111,27 @@ Macros * - FLT_MAX - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_MAX_10_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_MAX_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_MIN - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_MIN_10_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_MIN_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_NORM_MAX - - 5.3.5.3.3 @@ -139,11 +139,11 @@ Macros * - FLT_RADIX - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_ROUNDS - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - FLT_SNAN - - 5.3.5.3.3 @@ -151,7 +151,7 @@ Macros * - FLT_TRUE_MIN - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - INFINITY - - 5.3.5.3.3 @@ -159,19 +159,19 @@ Macros * - LDBL_DECIMAL_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_DIG - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_EPSILON - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_HAS_SUBNORM - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_IS_IEC_60559 - - 5.3.5.3.3 @@ -183,27 +183,27 @@ Macros * - LDBL_MAX - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_MAX_10_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_MAX_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_MIN - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_MIN_10_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_MIN_EXP - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - LDBL_NORM_MAX - - 5.3.5.3.3 @@ -215,7 +215,7 @@ Macros * - LDBL_TRUE_MIN - |check| - 5.3.5.3.3 - - + - `POSIX.1-2024 `__ * - NAN - - 5.3.5.3.3 diff --git a/libc/docs/headers/inttypes.rst b/libc/docs/headers/inttypes.rst index f43c80f095c6..9269b40f242a 100644 --- a/libc/docs/headers/inttypes.rst +++ b/libc/docs/headers/inttypes.rst @@ -15,28 +15,28 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - imaxabs - |check| - 7.8.2.1 - - + - `POSIX.1-2024 `__ * - imaxdiv - |check| - 7.8.2.2 - - + - `POSIX.1-2024 `__ * - strtoimax - |check| - 7.8.2.3 - - + - `POSIX.1-2024 `__ * - strtoumax - |check| - 7.8.2.3 - - + - `POSIX.1-2024 `__ * - wcstoimax - - 7.8.2.4 - - + - `POSIX.1-2024 `__ * - wcstoumax - - 7.8.2.4 - - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/locale.rst b/libc/docs/headers/locale.rst index 2d5525bd3f2f..c97d1f63b1f0 100644 --- a/libc/docs/headers/locale.rst +++ b/libc/docs/headers/locale.rst @@ -15,31 +15,31 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - LC_ALL - |check| - 7.11 - - + - `POSIX.1-2024 `__ * - LC_COLLATE - |check| - 7.11 - - + - `POSIX.1-2024 `__ * - LC_CTYPE - |check| - 7.11 - - + - `POSIX.1-2024 `__ * - LC_MONETARY - |check| - 7.11 - - + - `POSIX.1-2024 `__ * - LC_NUMERIC - |check| - 7.11 - - + - `POSIX.1-2024 `__ * - LC_TIME - |check| - 7.11 - - + - `POSIX.1-2024 `__ Functions ========= @@ -52,12 +52,32 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs + * - duplocale + - |check| + - + - `POSIX.1-2024 `__ + * - freelocale + - |check| + - + - `POSIX.1-2024 `__ + * - getlocalename_l + - + - + - `POSIX.1-2024 `__ * - localeconv - |check| - 7.11.2.1 + - `POSIX.1-2024 `__ + * - newlocale + - |check| - + - `POSIX.1-2024 `__ * - setlocale - |check| - 7.11.1.1 + - `POSIX.1-2024 `__ + * - uselocale + - |check| - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/signal.rst b/libc/docs/headers/signal.rst index b59ae0934235..4f51f611c9fe 100644 --- a/libc/docs/headers/signal.rst +++ b/libc/docs/headers/signal.rst @@ -15,143 +15,143 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - SIGABRT - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGALRM - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGBUS - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGCHLD - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGCONT - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGFPE - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGHUP - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGILL - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGINT - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGKILL - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGPIPE - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGPOLL - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGPROF - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGQUIT - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGRTMAX - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGRTMIN - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGSEGV - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGSTOP - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGSYS - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGTERM - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGTRAP - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGTSTP - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGTTIN - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGTTOU - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGURG - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGUSR1 - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGUSR2 - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGVTALRM - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGXCPU - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIGXFSZ - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIG_DFL - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIG_ERR - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIG_HOLD - - - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ * - SIG_IGN - |check| - 7.14.3 - - https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html + - `POSIX.1-2024 `__ Functions ========= @@ -164,44 +164,44 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - kill - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/kill.html + - `POSIX.1-2024 `__ * - raise - |check| - 7.14.2.1 - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/raise.html + - `POSIX.1-2024 `__ * - sigaction - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigaction.html + - `POSIX.1-2024 `__ * - sigaddset - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigaddset.html + - `POSIX.1-2024 `__ * - sigaltstack - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigaltstack.html + - `POSIX.1-2024 `__ * - sigdelset - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigdelset.html + - `POSIX.1-2024 `__ * - sigemptyset - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigemptyset.html + - `POSIX.1-2024 `__ * - sigfillset - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigfillset.html + - `POSIX.1-2024 `__ * - signal - |check| - 7.14.1.1 - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/signal.html + - `POSIX.1-2024 `__ * - sigprocmask - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigprocmask.html + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/stdlib.rst b/libc/docs/headers/stdlib.rst index 139d9b4a9222..4151f2934c94 100644 --- a/libc/docs/headers/stdlib.rst +++ b/libc/docs/headers/stdlib.rst @@ -15,23 +15,23 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - EXIT_FAILURE - |check| - 7.24 - - + - `POSIX.1-2024 `__ * - EXIT_SUCCESS - |check| - 7.24 - - + - `POSIX.1-2024 `__ * - MB_CUR_MAX - |check| - 7.24 - - + - `POSIX.1-2024 `__ * - RAND_MAX - |check| - 7.24 - - + - `POSIX.1-2024 `__ * - __STDC_VERSION_STDLIB_H__ - - 7.24 @@ -48,67 +48,67 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - _Exit - |check| - 7.24.4.5 - - + - `POSIX.1-2024 `__ * - abort - |check| - 7.24.4.1 - - + - `POSIX.1-2024 `__ * - abs - |check| - 7.24.6.1 - - + - `POSIX.1-2024 `__ * - aligned_alloc - |check| - 7.24.3.1 - - + - `POSIX.1-2024 `__ * - at_quick_exit - |check| - 7.24.4.3 - - + - `POSIX.1-2024 `__ * - atexit - |check| - 7.24.4.2 - - + - `POSIX.1-2024 `__ * - atof - |check| - 7.24.1.1 - - + - `POSIX.1-2024 `__ * - atoi - |check| - 7.24.1.2 - - + - `POSIX.1-2024 `__ * - atol - |check| - 7.24.1.2 - - + - `POSIX.1-2024 `__ * - atoll - |check| - 7.24.1.2 - - + - `POSIX.1-2024 `__ * - bsearch - |check| - 7.24.5.1 - - + - `POSIX.1-2024 `__ * - calloc - |check| - 7.24.3.2 - - + - `POSIX.1-2024 `__ * - div - |check| - 7.24.6.2 - - + - `POSIX.1-2024 `__ * - exit - |check| - 7.24.4.4 - - + - `POSIX.1-2024 `__ * - free - |check| - 7.24.3.3 - - + - `POSIX.1-2024 `__ * - free_aligned_sized - - 7.24.3.5 @@ -120,39 +120,39 @@ Functions * - getenv - |check| - 7.24.4.6 - - + - `POSIX.1-2024 `__ * - labs - |check| - 7.24.6.1 - - + - `POSIX.1-2024 `__ * - ldiv - |check| - 7.24.6.2 - - + - `POSIX.1-2024 `__ * - llabs - |check| - 7.24.6.1 - - + - `POSIX.1-2024 `__ * - lldiv - |check| - 7.24.6.2 - - + - `POSIX.1-2024 `__ * - malloc - |check| - 7.24.3.6 - - + - `POSIX.1-2024 `__ * - mblen - - 7.24.7.1 - - + - `POSIX.1-2024 `__ * - mbstowcs - - 7.24.8.1 - - + - `POSIX.1-2024 `__ * - mbtowc - - 7.24.7.2 - - + - `POSIX.1-2024 `__ * - memalignment - - 7.24.9.1 @@ -160,23 +160,23 @@ Functions * - qsort - |check| - 7.24.5.2 - - + - `POSIX.1-2024 `__ * - quick_exit - |check| - 7.24.4.7 - - + - `POSIX.1-2024 `__ * - rand - |check| - 7.24.2.1 - - + - `POSIX.1-2024 `__ * - realloc - |check| - 7.24.3.7 - - + - `POSIX.1-2024 `__ * - srand - |check| - 7.24.2.2 - - + - `POSIX.1-2024 `__ * - strfromd - |check| - 7.24.1.3 @@ -204,7 +204,7 @@ Functions * - strtod - |check| - 7.24.1.5 - - + - `POSIX.1-2024 `__ * - strtod128 - - 7.24.1.6 @@ -220,36 +220,36 @@ Functions * - strtof - |check| - 7.24.1.5 - - + - `POSIX.1-2024 `__ * - strtol - |check| - 7.24.1.7 - - + - `POSIX.1-2024 `__ * - strtold - |check| - 7.24.1.5 - - + - `POSIX.1-2024 `__ * - strtoll - |check| - 7.24.1.7 - - + - `POSIX.1-2024 `__ * - strtoul - |check| - 7.24.1.7 - - + - `POSIX.1-2024 `__ * - strtoull - |check| - 7.24.1.7 - - + - `POSIX.1-2024 `__ * - system - |check| - 7.24.4.8 - - + - `POSIX.1-2024 `__ * - wcstombs - - 7.24.8.2 - - + - `POSIX.1-2024 `__ * - wctomb - - 7.24.7.3 - - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/string.rst b/libc/docs/headers/string.rst index 55f779c830ea..2665ed8ca17e 100644 --- a/libc/docs/headers/string.rst +++ b/libc/docs/headers/string.rst @@ -15,7 +15,7 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - __STDC_VERSION_STRING_H__ - - 7.26.1 @@ -32,27 +32,27 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - memccpy - |check| - 7.26.2.2 - - + - `POSIX.1-2024 `__ * - memchr - |check| - 7.26.5.2 - - + - `POSIX.1-2024 `__ * - memcmp - |check| - 7.26.4.1 - - + - `POSIX.1-2024 `__ * - memcpy - |check| - 7.26.2.1 - - + - `POSIX.1-2024 `__ * - memmove - |check| - 7.26.2.3 - - + - `POSIX.1-2024 `__ * - mempcpy - |check| - TODO: glibc extension @@ -60,7 +60,7 @@ Functions * - memset - |check| - 7.26.6.1 - - + - `POSIX.1-2024 `__ * - memset_explicit - |check| - 7.26.6.2 @@ -68,88 +68,96 @@ Functions * - stpcpy - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/stpcpy.html + - `POSIX.1-2024 `__ * - stpncpy - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/stpncpy.html + - `POSIX.1-2024 `__ * - strcat - |check| - 7.26.3.1 - - + - `POSIX.1-2024 `__ * - strchr - |check| - 7.26.5.3 - - + - `POSIX.1-2024 `__ * - strcmp - |check| - 7.26.4.2 - - + - `POSIX.1-2024 `__ * - strcoll - |check| - 7.26.4.3 + - `POSIX.1-2024 `__ + * - strcoll_l + - |check| - + - `POSIX.1-2024 `__ * - strcpy - |check| - 7.26.2.4 - - + - `POSIX.1-2024 `__ * - strcspn - |check| - 7.26.5.4 - - + - `POSIX.1-2024 `__ * - strdup - |check| - 7.26.2.6 - - + - `POSIX.1-2024 `__ * - strerror - |check| - 7.26.6.3 - - + - `POSIX.1-2024 `__ * - strlen - |check| - 7.26.6.4 - - + - `POSIX.1-2024 `__ * - strncat - |check| - 7.26.3.2 - - + - `POSIX.1-2024 `__ * - strncmp - |check| - 7.26.4.4 - - + - `POSIX.1-2024 `__ * - strncpy - |check| - 7.26.2.5 - - + - `POSIX.1-2024 `__ * - strndup - |check| - 7.26.2.7 - - + - `POSIX.1-2024 `__ * - strpbrk - |check| - 7.26.5.5 - - + - `POSIX.1-2024 `__ * - strrchr - |check| - 7.26.5.6 - - + - `POSIX.1-2024 `__ * - strspn - |check| - 7.26.5.7 - - + - `POSIX.1-2024 `__ * - strstr - |check| - 7.26.5.8 - - + - `POSIX.1-2024 `__ * - strtok - |check| - 7.26.5.9 - - + - `POSIX.1-2024 `__ * - strtok_r - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/strtok_r.html + - `POSIX.1-2024 `__ * - strxfrm - |check| - 7.26.4.5 + - `POSIX.1-2024 `__ + * - strxfrm_l + - |check| - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/strings.rst b/libc/docs/headers/strings.rst index b5935d2683d0..effd667cd521 100644 --- a/libc/docs/headers/strings.rst +++ b/libc/docs/headers/strings.rst @@ -15,52 +15,52 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - bcmp - |check| - - - removed in POSIX.1-2008 + - `removed in POSIX.1-2008 `__ * - bcopy - |check| - - - removed in POSIX.1-2008 + - `removed in POSIX.1-2008 `__ * - bzero - |check| - - - removed in POSIX.1-2008 + - `removed in POSIX.1-2008 `__ * - ffs - - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/ffs.html + - `POSIX.1-2024 `__ * - ffsl - - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/ffsl.html + - `POSIX.1-2024 `__ * - ffsll - - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/ffsll.html + - `POSIX.1-2024 `__ * - index - |check| - - - removed in POSIX.1-2008 + - `removed in POSIX.1-2008 `__ * - rindex - |check| - - - removed in POSIX.1-2008 + - `removed in POSIX.1-2008 `__ * - strcasecmp - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html + - `POSIX.1-2024 `__ * - strcasecmp_l - - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html + - `POSIX.1-2024 `__ * - strncasecmp - |check| - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html + - `POSIX.1-2024 `__ * - strncasecmp_l - - - - https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/threads.rst b/libc/docs/headers/threads.rst index be313c6013b8..c2837b8c3591 100644 --- a/libc/docs/headers/threads.rst +++ b/libc/docs/headers/threads.rst @@ -15,19 +15,23 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - ONCE_FLAG_INIT - - 7.28.1 - - + - `POSIX.1-2024 `__ * - TSS_DTOR_ITERATIONS - - 7.28.1 - - + - `POSIX.1-2024 `__ * - __STDC_NO_THREADS__ - - 7.28.1 - + * - thread_local + - + - + - `POSIX.1-2024 `__ Functions ========= @@ -40,104 +44,104 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - call_once - |check| - 7.28.2.1 - - + - `POSIX.1-2024 `__ * - cnd_broadcast - |check| - 7.28.3.1 - - + - `POSIX.1-2024 `__ * - cnd_destroy - |check| - 7.28.3.2 - - + - `POSIX.1-2024 `__ * - cnd_init - |check| - 7.28.3.3 - - + - `POSIX.1-2024 `__ * - cnd_signal - |check| - 7.28.3.4 - - + - `POSIX.1-2024 `__ * - cnd_timedwait - - 7.28.3.5 - - + - `POSIX.1-2024 `__ * - cnd_wait - |check| - 7.28.3.6 - - + - `POSIX.1-2024 `__ * - mtx_destroy - |check| - 7.28.4.2 - - + - `POSIX.1-2024 `__ * - mtx_init - |check| - 7.28.4.3 - - + - `POSIX.1-2024 `__ * - mtx_lock - |check| - 7.28.4.4 - - + - `POSIX.1-2024 `__ * - mtx_timedlock - - 7.28.4.5 - - + - `POSIX.1-2024 `__ * - mtx_trylock - - 7.28.4.6 - - + - `POSIX.1-2024 `__ * - mtx_unlock - |check| - 7.28.4.7 - - + - `POSIX.1-2024 `__ * - thrd_create - |check| - 7.28.5.1 - - + - `POSIX.1-2024 `__ * - thrd_current - |check| - 7.28.5.2 - - + - `POSIX.1-2024 `__ * - thrd_detach - |check| - 7.28.5.3 - - + - `POSIX.1-2024 `__ * - thrd_equal - |check| - 7.28.5.4 - - + - `POSIX.1-2024 `__ * - thrd_exit - |check| - 7.28.5.5 - - + - `POSIX.1-2024 `__ * - thrd_join - |check| - 7.28.5.6 - - + - `POSIX.1-2024 `__ * - thrd_sleep - - 7.28.5.7 - - + - `POSIX.1-2024 `__ * - thrd_yield - - 7.28.5.8 - - + - `POSIX.1-2024 `__ * - tss_create - |check| - 7.28.6.1 - - + - `POSIX.1-2024 `__ * - tss_delete - |check| - 7.28.6.2 - - + - `POSIX.1-2024 `__ * - tss_get - |check| - 7.28.6.3 - - + - `POSIX.1-2024 `__ * - tss_set - |check| - 7.28.6.4 - - + - `POSIX.1-2024 `__ diff --git a/libc/docs/headers/uchar.rst b/libc/docs/headers/uchar.rst index 4645109c8c37..abb684bf9ae0 100644 --- a/libc/docs/headers/uchar.rst +++ b/libc/docs/headers/uchar.rst @@ -15,7 +15,7 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - __STDC_VERSION_UCHAR_H__ - - 7.30.1 @@ -32,15 +32,15 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - c16rtomb - - 7.30.2.5 - - + - `POSIX.1-2024 `__ * - c32rtomb - - 7.30.2.7 - - + - `POSIX.1-2024 `__ * - c8rtomb - - 7.30.2.3 @@ -48,11 +48,11 @@ Functions * - mbrtoc16 - - 7.30.2.4 - - + - `POSIX.1-2024 `__ * - mbrtoc32 - - 7.30.2.6 - - + - `POSIX.1-2024 `__ * - mbrtoc8 - - 7.30.2.2 diff --git a/libc/docs/headers/wchar.rst b/libc/docs/headers/wchar.rst index ce2be3389a2e..89a1e7b3fe66 100644 --- a/libc/docs/headers/wchar.rst +++ b/libc/docs/headers/wchar.rst @@ -15,7 +15,7 @@ Macros * - Macro - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - WEOF - |check| - 7.31.1 @@ -36,7 +36,7 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - btowc - |check| - 7.31.6.2.1 diff --git a/libc/docs/headers/wctype.rst b/libc/docs/headers/wctype.rst index 48096c3e2580..076db04f183e 100644 --- a/libc/docs/headers/wctype.rst +++ b/libc/docs/headers/wctype.rst @@ -15,7 +15,7 @@ Functions * - Function - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section + - POSIX Docs * - iswalnum - - 7.32.2.1.1 diff --git a/libc/utils/docgen/assert.json b/libc/utils/docgen/assert.json index 28ec12028ef6..ed9249cf426a 100644 --- a/libc/utils/docgen/assert.json +++ b/libc/utils/docgen/assert.json @@ -4,7 +4,8 @@ "c-definition": "7.2.1" }, "assert": { - "c-definition": "7.2.1" + "c-definition": "7.2.1", + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/ctype.json b/libc/utils/docgen/ctype.json index af97e4bbbc0a..7c6137570760 100644 --- a/libc/utils/docgen/ctype.json +++ b/libc/utils/docgen/ctype.json @@ -1,47 +1,102 @@ { "functions": { "isalnum": { - "c-definition": "7.4.1.1" + "c-definition": "7.4.1.1", + "in-latest-posix": "" + }, + "isalnum_l": { + "in-latest-posix": "" }, "isalpha": { - "c-definition": "7.4.1.2" + "c-definition": "7.4.1.2", + "in-latest-posix": "" + }, + "isalpha_l": { + "in-latest-posix": "" }, "isblank": { - "c-definition": "7.4.1.3" + "c-definition": "7.4.1.3", + "in-latest-posix": "" + }, + "isblank_l": { + "in-latest-posix": "" }, "iscntrl": { - "c-definition": "7.4.1.4" + "c-definition": "7.4.1.4", + "in-latest-posix": "" + }, + "iscntrl_l": { + "in-latest-posix": "" }, "isdigit": { - "c-definition": "7.4.1.5" + "c-definition": "7.4.1.5", + "in-latest-posix": "" + }, + "isdigit_l": { + "in-latest-posix": "" }, "isgraph": { - "c-definition": "7.4.1.6" + "c-definition": "7.4.1.6", + "in-latest-posix": "" + }, + "isgraph_l": { + "in-latest-posix": "" }, "islower": { - "c-definition": "7.4.1.7" + "c-definition": "7.4.1.7", + "in-latest-posix": "" + }, + "islower_l": { + "in-latest-posix": "" }, "isprint": { - "c-definition": "7.4.1.8" + "c-definition": "7.4.1.8", + "in-latest-posix": "" + }, + "isprint_l": { + "in-latest-posix": "" }, "ispunct": { - "c-definition": "7.4.1.9" + "c-definition": "7.4.1.9", + "in-latest-posix": "" + }, + "ispunct_l": { + "in-latest-posix": "" }, "isspace": { - "c-definition": "7.4.1.10" + "c-definition": "7.4.1.10", + "in-latest-posix": "" + }, + "isspace_l": { + "in-latest-posix": "" }, "isupper": { - "c-definition": "7.4.1.11" + "c-definition": "7.4.1.11", + "in-latest-posix": "" + }, + "isupper_l": { + "in-latest-posix": "" }, "isxdigit": { - "c-definition": "7.4.1.12" + "c-definition": "7.4.1.12", + "in-latest-posix": "" + }, + "isxdigit_l": { + "in-latest-posix": "" }, "tolower" : { - "c-definition": "7.4.2.1" + "c-definition": "7.4.2.1", + "in-latest-posix": "" + }, + "tolower_l" : { + "in-latest-posix": "" }, "toupper": { - "c-definition": "7.4.2.2" + "c-definition": "7.4.2.2", + "in-latest-posix": "" + }, + "toupper_l": { + "in-latest-posix": "" } } } - diff --git a/libc/utils/docgen/docgen.py b/libc/utils/docgen/docgen.py index 20716c0996ef..5355dff3e2a6 100755 --- a/libc/utils/docgen/docgen.py +++ b/libc/utils/docgen/docgen.py @@ -52,8 +52,12 @@ def check_api(header: Header, api: Dict): :param api: docgen json file contents parsed into a dict """ errors = [] - cdef = "c-definition" - pdef = "posix-definition" + # We require entries to have at least one of these. + possible_keys = [ + "c-definition", + "in-latest-posix", + "removed-in-posix-2008", + ] # Validate macros if "macros" in api: @@ -66,8 +70,8 @@ def check_api(header: Header, api: Dict): macros = api["macros"] for name, obj in macros.items(): - if not (cdef in obj or pdef in obj): - err = f'error: Macro {name} does not contain at least one required property: "{cdef}" or "{pdef}"' + if not any(k in obj for k in possible_keys): + err = f"error: Macro {name} does not contain at least one required property: {possible_keys}" errors.append(err) # Validate functions @@ -80,8 +84,8 @@ def check_api(header: Header, api: Dict): fns = api["functions"] for name, obj in fns.items(): - if not (cdef in obj or pdef in obj): - err = f'error: function {name} does not contain at least one required property: "{cdef}" or "{pdef}"' + if not any(k in obj for k in possible_keys): + err = f"error: function {name} does not contain at least one required property: {possible_keys}" errors.append(err) if errors: @@ -104,7 +108,7 @@ def print_tbl_dir(name): * - {name} - Implemented - C23 Standard Section - - POSIX.1-2024 Standard Section""" + - POSIX Docs""" ) @@ -128,8 +132,14 @@ def print_functions_rst(header: Header, functions: Dict): else: print(" -") - if "posix-definition" in functions[name]: - print(f' - {functions[name]["posix-definition"]}') + if "in-latest-posix" in functions[name]: + print( + f" - `POSIX.1-2024 `__" + ) + elif "removed-in-posix-2008" in functions[name]: + print( + f" - `removed in POSIX.1-2008 `__" + ) else: print(" -") @@ -154,8 +164,10 @@ def print_macros_rst(header: Header, macros: Dict): else: print(" -") - if "posix-definition" in macros[name]: - print(f' - {macros[name]["posix-definition"]}') + if "in-latest-posix" in macros[name]: + print( + f" - `POSIX.1-2024 `__" + ) else: print(" -") print() diff --git a/libc/utils/docgen/errno.json b/libc/utils/docgen/errno.json index aface8e42b49..7f13e06ac328 100644 --- a/libc/utils/docgen/errno.json +++ b/libc/utils/docgen/errno.json @@ -1,16 +1,20 @@ { "macros": { "EDOM": { - "c-definition": "7.5" + "c-definition": "7.5", + "in-latest-posix": "" }, "EILSEQ": { - "c-definition": "7.5" + "c-definition": "7.5", + "in-latest-posix": "" }, "ERANGE": { - "c-definition": "7.5" + "c-definition": "7.5", + "in-latest-posix": "" }, "errno": { - "c-definition": "7.5" + "c-definition": "7.5", + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/fenv.json b/libc/utils/docgen/fenv.json index 788b196c053b..cf58d70ebcf1 100644 --- a/libc/utils/docgen/fenv.json +++ b/libc/utils/docgen/fenv.json @@ -4,40 +4,50 @@ "c-definition": "7.6.5" }, "FE_DIVBYZERO": { - "c-definition": "7.6.9" + "c-definition": "7.6.9", + "in-latest-posix": "" }, "FE_INEXACT": { - "c-definition": "7.6.9" + "c-definition": "7.6.9", + "in-latest-posix": "" }, "FE_INVALID": { - "c-definition": "7.6.9" + "c-definition": "7.6.9", + "in-latest-posix": "" }, "FE_OVERFLOW": { - "c-definition": "7.6.9" + "c-definition": "7.6.9", + "in-latest-posix": "" }, "FE_UNDERFLOW": { - "c-definition": "7.6.9" + "c-definition": "7.6.9", + "in-latest-posix": "" }, "FE_ALL_EXCEPT": { - "c-definition": "7.6.12" + "c-definition": "7.6.12", + "in-latest-posix": "" }, "FE_DFL_MODE": { "c-definition": "7.6.11" }, - "FE_DOWNARD": { - "c-definition": "7.6.13" + "FE_DOWNWARD": { + "c-definition": "7.6.13", + "in-latest-posix": "" }, "FE_TONEAREST": { - "c-definition": "7.6.13" + "c-definition": "7.6.13", + "in-latest-posix": "" }, "FE_TONEARESTFROMZERO": { "c-definition": "7.6.13" }, "FE_TOWARDZERO": { - "c-definition": "7.6.13" + "c-definition": "7.6.13", + "in-latest-posix": "" }, "FE_UPWARD": { - "c-definition": "7.6.13" + "c-definition": "7.6.13", + "in-latest-posix": "" }, "FE_DEC_DOWNWARD": { "c-definition": "7.6.14" @@ -55,36 +65,43 @@ "c-definition": "7.6.14" }, "FE_DFL_ENV": { - "c-definition": "7.6.17" + "c-definition": "7.6.17", + "in-latest-posix": "" } }, "functions": { "feclearexcept": { - "c-definition": "7.6.4.1" + "c-definition": "7.6.4.1", + "in-latest-posix": "" }, "fegetexceptflag": { - "c-definition": "7.6.4.2" + "c-definition": "7.6.4.2", + "in-latest-posix": "" }, "feraiseexcept": { - "c-definition": "7.6.4.3" + "c-definition": "7.6.4.3", + "in-latest-posix": "" }, "fesetexcept": { "c-definition": "7.6.4.4" }, "fesetexceptflag": { - "c-definition": "7.6.4.5" + "c-definition": "7.6.4.5", + "in-latest-posix": "" }, "fetestexceptflag": { "c-definition": "7.6.4.6" }, "fetestexcept": { - "c-definition": "7.6.4.7" + "c-definition": "7.6.4.7", + "in-latest-posix": "" }, "fegetmode": { "c-definition": "7.6.5.1" }, "fegetround": { - "c-definition": "7.6.5.2" + "c-definition": "7.6.5.2", + "in-latest-posix": "" }, "fe_dec_getround": { "c-definition": "7.6.5.3" @@ -93,22 +110,27 @@ "c-definition": "7.6.5.4" }, "fesetround": { - "c-definition": "7.6.5.5" + "c-definition": "7.6.5.5", + "in-latest-posix": "" }, "fe_dec_setround": { "c-definition": "7.6.5.6" }, "fegetenv": { - "c-definition": "7.6.6.1" + "c-definition": "7.6.6.1", + "in-latest-posix": "" }, "feholdexcept": { - "c-definition": "7.6.6.2" + "c-definition": "7.6.6.2", + "in-latest-posix": "" }, "fesetenv": { - "c-definition": "7.6.6.3" + "c-definition": "7.6.6.3", + "in-latest-posix": "" }, "feupdateenv": { - "c-definition": "7.6.6.4" + "c-definition": "7.6.6.4", + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/float.json b/libc/utils/docgen/float.json index a906cbf4fa75..87746193b29d 100644 --- a/libc/utils/docgen/float.json +++ b/libc/utils/docgen/float.json @@ -4,25 +4,32 @@ "c-definition": "7.7" }, "FLT_EVAL_METHOD" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_ROUNDS" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_EVAL_METHOD" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_HAS_SUBNORM" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_HAS_SUBNORM" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_HAS_SUBNORM" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_RADIX" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MANT_DIG" : { "c-definition": "5.3.5.3.3" @@ -34,16 +41,20 @@ "c-definition": "5.3.5.3.3" }, "FLT_DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_IS_IEC_60559" : { "c-definition": "5.3.5.3.3" @@ -55,58 +66,76 @@ "c-definition": "5.3.5.3.3" }, "FLT_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_DIG" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MIN_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_MIN_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_MIN_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MIN_10_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_MIN_10_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_MIN_10_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MAX_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_MAX_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_MAX_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MAX_10_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_MAX_10_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_MAX_10_EXP" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MAX" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_MAX" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_MAX" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_NORM_MAX" : { "c-definition": "5.3.5.3.3" @@ -118,22 +147,28 @@ "c-definition": "5.3.5.3.3" }, "FLT_EPSILON" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_EPSILON" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_EPSILON" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_MIN" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_MIN" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_MIN" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "FLT_SNAN" : { "c-definition": "5.3.5.3.3" @@ -145,13 +180,16 @@ "c-definition": "5.3.5.3.3" }, "FLT_TRUE_MIN" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "DBL_TRUE_MIN" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "LDBL_TRUE_MIN" : { - "c-definition": "5.3.5.3.3" + "c-definition": "5.3.5.3.3", + "in-latest-posix": "" }, "INFINITY" : { "c-definition": "5.3.5.3.3" diff --git a/libc/utils/docgen/inttypes.json b/libc/utils/docgen/inttypes.json index 001f15f27e63..4c20d3d5cf3c 100644 --- a/libc/utils/docgen/inttypes.json +++ b/libc/utils/docgen/inttypes.json @@ -1,22 +1,28 @@ { "functions": { "imaxabs": { - "c-definition": "7.8.2.1" + "c-definition": "7.8.2.1", + "in-latest-posix": "" }, "imaxdiv": { - "c-definition": "7.8.2.2" + "c-definition": "7.8.2.2", + "in-latest-posix": "" }, "strtoimax": { - "c-definition": "7.8.2.3" + "c-definition": "7.8.2.3", + "in-latest-posix": "" }, "strtoumax": { - "c-definition": "7.8.2.3" + "c-definition": "7.8.2.3", + "in-latest-posix": "" }, "wcstoimax": { - "c-definition": "7.8.2.4" + "c-definition": "7.8.2.4", + "in-latest-posix": "" }, "wcstoumax": { - "c-definition": "7.8.2.4" + "c-definition": "7.8.2.4", + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/locale.json b/libc/utils/docgen/locale.json index 89329f9aae5b..9af8156f5467 100644 --- a/libc/utils/docgen/locale.json +++ b/libc/utils/docgen/locale.json @@ -1,30 +1,53 @@ { "macros": { "LC_ALL": { - "c-definition": "7.11" + "c-definition": "7.11", + "in-latest-posix": "" }, "LC_COLLATE": { - "c-definition": "7.11" + "c-definition": "7.11", + "in-latest-posix": "" }, "LC_CTYPE": { - "c-definition": "7.11" + "c-definition": "7.11", + "in-latest-posix": "" }, "LC_MONETARY": { - "c-definition": "7.11" + "c-definition": "7.11", + "in-latest-posix": "" }, "LC_NUMERIC": { - "c-definition": "7.11" + "c-definition": "7.11", + "in-latest-posix": "" }, "LC_TIME": { - "c-definition": "7.11" + "c-definition": "7.11", + "in-latest-posix": "" } }, "functions": { "setlocale": { - "c-definition": "7.11.1.1" + "c-definition": "7.11.1.1", + "in-latest-posix": "" }, "localeconv": { - "c-definition": "7.11.2.1" + "c-definition": "7.11.2.1", + "in-latest-posix": "" + }, + "duplocale": { + "in-latest-posix": "" + }, + "freelocale": { + "in-latest-posix": "" + }, + "getlocalename_l": { + "in-latest-posix": "" + }, + "newlocale": { + "in-latest-posix": "" + }, + "uselocale": { + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/setjmp.json b/libc/utils/docgen/setjmp.json index 0b9a4e65da4f..22bc81b223fa 100644 --- a/libc/utils/docgen/setjmp.json +++ b/libc/utils/docgen/setjmp.json @@ -6,10 +6,18 @@ }, "functions": { "setjmp": { - "c-definition": "7.13.1.1" + "c-definition": "7.13.1.1", + "in-latest-posix": "" }, "longjmp": { - "c-definition": "7.13.2.1" + "c-definition": "7.13.2.1", + "in-latest-posix": "" + }, + "sigsetjmp": { + "in-latest-posix": "" + }, + "siglongjmp": { + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/signal.json b/libc/utils/docgen/signal.json index ec83144da857..1a8bd94268db 100644 --- a/libc/utils/docgen/signal.json +++ b/libc/utils/docgen/signal.json @@ -2,151 +2,151 @@ "macros": { "SIG_DFL": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIG_ERR": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIG_HOLD": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIG_IGN": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGRTMIN": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGRTMAX": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGABRT": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGALRM": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGBUS": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGCHLD": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGCONT": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGFPE": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGHUP": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGILL": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGINT": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGKILL": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGPIPE": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGPIPE": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGQUIT": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGSEGV": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGSTOP": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGTERM": { "c-definition": "7.14.3", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGTSTP": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGTTIN": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGTTOU": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGUSR1": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGUSR2": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGPOLL": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGPROF": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGSYS": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGTRAP": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGURG": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGVTALRM": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGXCPU": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" }, "SIGXFSZ": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html" + "in-latest-posix": "" } }, "functions": { "signal": { "c-definition": "7.14.1.1", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/signal.html" + "in-latest-posix": "" }, "raise": { "c-definition": "7.14.2.1", - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/raise.html" + "in-latest-posix": "" }, "kill": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/kill.html" + "in-latest-posix": "" }, "sigaction": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigaction.html" + "in-latest-posix": "" }, "sigaddset": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigaddset.html" + "in-latest-posix": "" }, "sigaltstack": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigaltstack.html" + "in-latest-posix": "" }, "sigdelset": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigdelset.html" + "in-latest-posix": "" }, "sigemptyset": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigemptyset.html" + "in-latest-posix": "" }, "sigfillset": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigfillset.html" + "in-latest-posix": "" }, "sigprocmask": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/sigprocmask.html" + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/stdlib.json b/libc/utils/docgen/stdlib.json index 0ca508110c0f..cd8706471d76 100644 --- a/libc/utils/docgen/stdlib.json +++ b/libc/utils/docgen/stdlib.json @@ -4,30 +4,38 @@ "c-definition": "7.24" }, "EXIT_FAILURE": { - "c-definition": "7.24" + "c-definition": "7.24", + "in-latest-posix": "" }, "EXIT_SUCCESS": { - "c-definition": "7.24" + "c-definition": "7.24", + "in-latest-posix": "" }, "RAND_MAX": { - "c-definition": "7.24" + "c-definition": "7.24", + "in-latest-posix": "" }, "MB_CUR_MAX": { - "c-definition": "7.24" + "c-definition": "7.24", + "in-latest-posix": "" } }, "functions": { "atof": { - "c-definition": "7.24.1.1" + "c-definition": "7.24.1.1", + "in-latest-posix": "" }, "atoi": { - "c-definition": "7.24.1.2" + "c-definition": "7.24.1.2", + "in-latest-posix": "" }, "atol": { - "c-definition": "7.24.1.2" + "c-definition": "7.24.1.2", + "in-latest-posix": "" }, "atoll": { - "c-definition": "7.24.1.2" + "c-definition": "7.24.1.2", + "in-latest-posix": "" }, "strfromd": { "c-definition": "7.24.1.3" @@ -48,13 +56,16 @@ "c-definition": "7.24.1.4" }, "strtod": { - "c-definition": "7.24.1.5" + "c-definition": "7.24.1.5", + "in-latest-posix": "" }, "strtof": { - "c-definition": "7.24.1.5" + "c-definition": "7.24.1.5", + "in-latest-posix": "" }, "strtold": { - "c-definition": "7.24.1.5" + "c-definition": "7.24.1.5", + "in-latest-posix": "" }, "strtod32": { "c-definition": "7.24.1.6" @@ -66,31 +77,40 @@ "c-definition": "7.24.1.6" }, "strtol": { - "c-definition": "7.24.1.7" + "c-definition": "7.24.1.7", + "in-latest-posix": "" }, "strtoll": { - "c-definition": "7.24.1.7" + "c-definition": "7.24.1.7", + "in-latest-posix": "" }, "strtoul": { - "c-definition": "7.24.1.7" + "c-definition": "7.24.1.7", + "in-latest-posix": "" }, "strtoull": { - "c-definition": "7.24.1.7" + "c-definition": "7.24.1.7", + "in-latest-posix": "" }, "rand": { - "c-definition": "7.24.2.1" + "c-definition": "7.24.2.1", + "in-latest-posix": "" }, "srand": { - "c-definition": "7.24.2.2" + "c-definition": "7.24.2.2", + "in-latest-posix": "" }, "aligned_alloc": { - "c-definition": "7.24.3.1" + "c-definition": "7.24.3.1", + "in-latest-posix": "" }, "calloc": { - "c-definition": "7.24.3.2" + "c-definition": "7.24.3.2", + "in-latest-posix": "" }, "free": { - "c-definition": "7.24.3.3" + "c-definition": "7.24.3.3", + "in-latest-posix": "" }, "free_sized": { "c-definition": "7.24.3.4" @@ -99,73 +119,96 @@ "c-definition": "7.24.3.5" }, "malloc": { - "c-definition": "7.24.3.6" + "c-definition": "7.24.3.6", + "in-latest-posix": "" }, "realloc": { - "c-definition": "7.24.3.7" + "c-definition": "7.24.3.7", + "in-latest-posix": "" }, "abort": { - "c-definition": "7.24.4.1" + "c-definition": "7.24.4.1", + "in-latest-posix": "" }, "atexit": { - "c-definition": "7.24.4.2" + "c-definition": "7.24.4.2", + "in-latest-posix": "" }, "at_quick_exit": { - "c-definition": "7.24.4.3" + "c-definition": "7.24.4.3", + "in-latest-posix": "" }, "exit": { - "c-definition": "7.24.4.4" + "c-definition": "7.24.4.4", + "in-latest-posix": "" }, "_Exit": { - "c-definition": "7.24.4.5" + "c-definition": "7.24.4.5", + "in-latest-posix": "" }, "getenv": { - "c-definition": "7.24.4.6" + "c-definition": "7.24.4.6", + "in-latest-posix": "" }, "quick_exit": { - "c-definition": "7.24.4.7" + "c-definition": "7.24.4.7", + "in-latest-posix": "" }, "system": { - "c-definition": "7.24.4.8" + "c-definition": "7.24.4.8", + "in-latest-posix": "" }, "bsearch": { - "c-definition": "7.24.5.1" + "c-definition": "7.24.5.1", + "in-latest-posix": "" }, "qsort": { - "c-definition": "7.24.5.2" + "c-definition": "7.24.5.2", + "in-latest-posix": "" }, "abs": { - "c-definition": "7.24.6.1" + "c-definition": "7.24.6.1", + "in-latest-posix": "" }, "labs": { - "c-definition": "7.24.6.1" + "c-definition": "7.24.6.1", + "in-latest-posix": "" }, "llabs": { - "c-definition": "7.24.6.1" + "c-definition": "7.24.6.1", + "in-latest-posix": "" }, "div": { - "c-definition": "7.24.6.2" + "c-definition": "7.24.6.2", + "in-latest-posix": "" }, "ldiv": { - "c-definition": "7.24.6.2" + "c-definition": "7.24.6.2", + "in-latest-posix": "" }, "lldiv": { - "c-definition": "7.24.6.2" + "c-definition": "7.24.6.2", + "in-latest-posix": "" }, "mblen": { - "c-definition": "7.24.7.1" + "c-definition": "7.24.7.1", + "in-latest-posix": "" }, "mbtowc": { - "c-definition": "7.24.7.2" + "c-definition": "7.24.7.2", + "in-latest-posix": "" }, "wctomb": { - "c-definition": "7.24.7.3" + "c-definition": "7.24.7.3", + "in-latest-posix": "" }, "mbstowcs": { - "c-definition": "7.24.8.1" + "c-definition": "7.24.8.1", + "in-latest-posix": "" }, "wcstombs": { - "c-definition": "7.24.8.2" + "c-definition": "7.24.8.2", + "in-latest-posix": "" }, "memalignment": { "c-definition": "7.24.9.1" diff --git a/libc/utils/docgen/string.json b/libc/utils/docgen/string.json index d3fd9daf186a..f31c8e8b8126 100644 --- a/libc/utils/docgen/string.json +++ b/libc/utils/docgen/string.json @@ -6,94 +6,125 @@ }, "functions": { "memcpy": { - "c-definition": "7.26.2.1" + "c-definition": "7.26.2.1", + "in-latest-posix": "" }, "memccpy": { - "c-definition": "7.26.2.2" + "c-definition": "7.26.2.2", + "in-latest-posix": "" }, "mempcpy": { "c-definition": "TODO: glibc extension" }, "memmove": { - "c-definition": "7.26.2.3" + "c-definition": "7.26.2.3", + "in-latest-posix": "" }, "strcpy": { - "c-definition": "7.26.2.4" + "c-definition": "7.26.2.4", + "in-latest-posix": "" }, "strncpy": { - "c-definition": "7.26.2.5" + "c-definition": "7.26.2.5", + "in-latest-posix": "" }, "stpcpy": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/stpcpy.html" + "in-latest-posix": "" }, "stpncpy": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/stpncpy.html" + "in-latest-posix": "" }, "strdup": { - "c-definition": "7.26.2.6" + "c-definition": "7.26.2.6", + "in-latest-posix": "" }, "strndup": { - "c-definition": "7.26.2.7" + "c-definition": "7.26.2.7", + "in-latest-posix": "" }, "strcat": { - "c-definition": "7.26.3.1" + "c-definition": "7.26.3.1", + "in-latest-posix": "" }, "strncat": { - "c-definition": "7.26.3.2" + "c-definition": "7.26.3.2", + "in-latest-posix": "" }, "memcmp": { - "c-definition": "7.26.4.1" + "c-definition": "7.26.4.1", + "in-latest-posix": "" }, "strcmp": { - "c-definition": "7.26.4.2" + "c-definition": "7.26.4.2", + "in-latest-posix": "" }, "strcoll": { - "c-definition": "7.26.4.3" + "c-definition": "7.26.4.3", + "in-latest-posix": "" + }, + "strcoll_l": { + "in-latest-posix": "" }, "strncmp": { - "c-definition": "7.26.4.4" + "c-definition": "7.26.4.4", + "in-latest-posix": "" }, "strxfrm": { - "c-definition": "7.26.4.5" + "c-definition": "7.26.4.5", + "in-latest-posix": "" + }, + "strxfrm_l": { + "in-latest-posix": "" }, "memchr": { - "c-definition": "7.26.5.2" + "c-definition": "7.26.5.2", + "in-latest-posix": "" }, "strchr": { - "c-definition": "7.26.5.3" + "c-definition": "7.26.5.3", + "in-latest-posix": "" }, "strcspn": { - "c-definition": "7.26.5.4" + "c-definition": "7.26.5.4", + "in-latest-posix": "" }, "strpbrk": { - "c-definition": "7.26.5.5" + "c-definition": "7.26.5.5", + "in-latest-posix": "" }, "strrchr": { - "c-definition": "7.26.5.6" + "c-definition": "7.26.5.6", + "in-latest-posix": "" }, "strspn": { - "c-definition": "7.26.5.7" + "c-definition": "7.26.5.7", + "in-latest-posix": "" }, "strstr": { - "c-definition": "7.26.5.8" + "c-definition": "7.26.5.8", + "in-latest-posix": "" }, "strtok": { - "c-definition": "7.26.5.9" + "c-definition": "7.26.5.9", + "in-latest-posix": "" }, "strtok_r": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/strtok_r.html" + "in-latest-posix": "" }, "memset": { - "c-definition": "7.26.6.1" + "c-definition": "7.26.6.1", + "in-latest-posix": "" }, "memset_explicit": { "c-definition": "7.26.6.2" }, "strerror": { - "c-definition": "7.26.6.3" + "c-definition": "7.26.6.3", + "in-latest-posix": "" }, "strlen": { - "c-definition": "7.26.6.4" + "c-definition": "7.26.6.4", + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/strings.json b/libc/utils/docgen/strings.json index 5274745f5f50..c1c579a13dbd 100644 --- a/libc/utils/docgen/strings.json +++ b/libc/utils/docgen/strings.json @@ -1,40 +1,40 @@ { "functions": { "bzero": { - "posix-definition": "removed in POSIX.1-2008" + "removed-in-posix-2008": "" }, "bcmp": { - "posix-definition": "removed in POSIX.1-2008" + "removed-in-posix-2008": "" }, "bcopy": { - "posix-definition": "removed in POSIX.1-2008" + "removed-in-posix-2008": "" }, "ffs": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/ffs.html" + "in-latest-posix": "" }, "ffsl": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/ffsl.html" + "in-latest-posix": "" }, "ffsll": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/ffsll.html" + "in-latest-posix": "" }, "index": { - "posix-definition": "removed in POSIX.1-2008" + "removed-in-posix-2008": "" }, "rindex": { - "posix-definition": "removed in POSIX.1-2008" + "removed-in-posix-2008": "" }, "strcasecmp": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html" + "in-latest-posix": "" }, "strcasecmp_l": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html" + "in-latest-posix": "" }, "strncasecmp": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html" + "in-latest-posix": "" }, "strncasecmp_l": { - "posix-definition": "https://pubs.opengroup.org/onlinepubs/9799919799/functions/strncasecmp.html" + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/threads.json b/libc/utils/docgen/threads.json index 62c5ff881e42..3043d148a011 100644 --- a/libc/utils/docgen/threads.json +++ b/libc/utils/docgen/threads.json @@ -4,87 +4,117 @@ "c-definition": "7.28.1" }, "ONCE_FLAG_INIT": { - "c-definition": "7.28.1" + "c-definition": "7.28.1", + "in-latest-posix": "" }, "TSS_DTOR_ITERATIONS": { - "c-definition": "7.28.1" + "c-definition": "7.28.1", + "in-latest-posix": "" + }, + "thread_local": { + "in-latest-posix": "" } }, "functions": { "call_once": { - "c-definition": "7.28.2.1" + "c-definition": "7.28.2.1", + "in-latest-posix": "" }, "cnd_broadcast": { - "c-definition": "7.28.3.1" + "c-definition": "7.28.3.1", + "in-latest-posix": "" }, "cnd_destroy": { - "c-definition": "7.28.3.2" + "c-definition": "7.28.3.2", + "in-latest-posix": "" }, "cnd_init": { - "c-definition": "7.28.3.3" + "c-definition": "7.28.3.3", + "in-latest-posix": "" }, "cnd_signal": { - "c-definition": "7.28.3.4" + "c-definition": "7.28.3.4", + "in-latest-posix": "" }, "cnd_timedwait": { - "c-definition": "7.28.3.5" + "c-definition": "7.28.3.5", + "in-latest-posix": "" }, "cnd_wait": { - "c-definition": "7.28.3.6" + "c-definition": "7.28.3.6", + "in-latest-posix": "" }, "mtx_destroy": { - "c-definition": "7.28.4.2" + "c-definition": "7.28.4.2", + "in-latest-posix": "" }, "mtx_init": { - "c-definition": "7.28.4.3" + "c-definition": "7.28.4.3", + "in-latest-posix": "" }, "mtx_lock": { - "c-definition": "7.28.4.4" + "c-definition": "7.28.4.4", + "in-latest-posix": "" }, "mtx_timedlock": { - "c-definition": "7.28.4.5" + "c-definition": "7.28.4.5", + "in-latest-posix": "" }, "mtx_trylock": { - "c-definition": "7.28.4.6" + "c-definition": "7.28.4.6", + "in-latest-posix": "" }, "mtx_unlock": { - "c-definition": "7.28.4.7" + "c-definition": "7.28.4.7", + "in-latest-posix": "" }, "thrd_create": { - "c-definition": "7.28.5.1" + "c-definition": "7.28.5.1", + "in-latest-posix": "" }, "thrd_current": { - "c-definition": "7.28.5.2" + "c-definition": "7.28.5.2", + "in-latest-posix": "" }, "thrd_detach": { - "c-definition": "7.28.5.3" + "c-definition": "7.28.5.3", + "in-latest-posix": "" }, "thrd_equal": { - "c-definition": "7.28.5.4" + "c-definition": "7.28.5.4", + "in-latest-posix": "" }, "thrd_exit": { - "c-definition": "7.28.5.5" + "c-definition": "7.28.5.5", + "in-latest-posix": "" }, "thrd_join": { - "c-definition": "7.28.5.6" + "c-definition": "7.28.5.6", + "in-latest-posix": "" }, "thrd_sleep": { - "c-definition": "7.28.5.7" + "c-definition": "7.28.5.7", + "in-latest-posix": "" }, "thrd_yield": { - "c-definition": "7.28.5.8" + "c-definition": "7.28.5.8", + "in-latest-posix": "" }, "tss_create": { - "c-definition": "7.28.6.1" + "c-definition": "7.28.6.1", + "in-latest-posix": "" }, "tss_delete": { - "c-definition": "7.28.6.2" + "c-definition": "7.28.6.2", + "in-latest-posix": "" }, "tss_get": { - "c-definition": "7.28.6.3" + "c-definition": "7.28.6.3", + "in-latest-posix": "" }, "tss_set": { - "c-definition": "7.28.6.4" + "c-definition": "7.28.6.4", + "in-latest-posix": "" } } } diff --git a/libc/utils/docgen/uchar.json b/libc/utils/docgen/uchar.json index c7a8764657da..e4537873d36a 100644 --- a/libc/utils/docgen/uchar.json +++ b/libc/utils/docgen/uchar.json @@ -12,16 +12,20 @@ "c-definition": "7.30.2.3" }, "mbrtoc16": { - "c-definition": "7.30.2.4" + "c-definition": "7.30.2.4", + "in-latest-posix": "" }, "c16rtomb": { - "c-definition": "7.30.2.5" + "c-definition": "7.30.2.5", + "in-latest-posix": "" }, "mbrtoc32": { - "c-definition": "7.30.2.6" + "c-definition": "7.30.2.6", + "in-latest-posix": "" }, "c32rtomb": { - "c-definition": "7.30.2.7" + "c-definition": "7.30.2.7", + "in-latest-posix": "" } } } -- cgit v1.2.3 From f0f8434afac2d30ac143250377fb6433c68fc0a8 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Thu, 12 Dec 2024 10:54:54 -0800 Subject: [OpenACC] Implement sema for 'async' on 'data' constructs This also is a clause that doesn't have any special rules, so this patch enables it and adds tests. --- clang/lib/Sema/SemaOpenACC.cpp | 10 ++-- .../test/AST/ast-print-openacc-data-construct.cpp | 8 +++ clang/test/ParserOpenACC/parse-clauses.c | 16 +++--- .../test/SemaOpenACC/data-construct-async-ast.cpp | 61 ++++++++++++++++++++++ .../test/SemaOpenACC/data-construct-async-clause.c | 44 ++++++++++++++++ .../data-construct-device_type-clause.c | 1 - clang/test/SemaOpenACC/data-construct.cpp | 4 -- 7 files changed, 125 insertions(+), 19 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-async-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-async-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index ca073e93b4a8..f438ec193bf0 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -876,11 +876,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitVectorLengthClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitAsyncClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // There is no prose in the standard that says duplicates aren't allowed, diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 88540657dd52..508dc816b0fa 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -43,4 +43,12 @@ void foo() { // CHECK: #pragma acc host_data if(i == array[1]) #pragma acc host_data use_device(Var) if(i == array[1]) ; + +// CHECK: #pragma acc data async(i) +#pragma acc data default(none) async(i) + ; +// CHECK: #pragma acc enter data async(i) +#pragma acc enter data copyin(i) async(i) +// CHECK: #pragma acc exit data async +#pragma acc exit data copyout(i) async } diff --git a/clang/test/ParserOpenACC/parse-clauses.c b/clang/test/ParserOpenACC/parse-clauses.c index e2f0a753dd37..bb8c76200e8d 100644 --- a/clang/test/ParserOpenACC/parse-clauses.c +++ b/clang/test/ParserOpenACC/parse-clauses.c @@ -521,25 +521,21 @@ void VarListClauses() { #pragma acc serial firstprivate(s.array[s.value : 5], s.value), self for(int i = 0; i < 5;++i) {} - // expected-error@+3{{expected ','}} - // expected-warning@+2{{OpenACC clause 'delete' not yet implemented, clause ignored}} - // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} + // expected-error@+2{{expected ','}} + // expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}} #pragma acc exit data delete(s.array[s.value] s.array[s.value :5] ) async for(int i = 0; i < 5;++i) {} - // expected-warning@+2{{OpenACC clause 'delete' not yet implemented, clause ignored}} - // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} + // expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}} #pragma acc exit data delete(s.array[s.value : 5], s.value),async for(int i = 0; i < 5;++i) {} - // expected-error@+3{{expected ','}} - // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented, clause ignored}} - // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} + // expected-error@+2{{expected ','}} + // expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}} #pragma acc exit data use_device(s.array[s.value] s.array[s.value :5] ),async for(int i = 0; i < 5;++i) {} - // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented, clause ignored}} - // expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}} + // expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}} #pragma acc exit data use_device(s.array[s.value : 5], s.value), async for(int i = 0; i < 5;++i) {} diff --git a/clang/test/SemaOpenACC/data-construct-async-ast.cpp b/clang/test/SemaOpenACC/data-construct-async-ast.cpp new file mode 100644 index 000000000000..d16cc6f48079 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-async-ast.cpp @@ -0,0 +1,61 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s +#ifndef PCH_HELPER +#define PCH_HELPER + +int some_int(); + +template +void TemplUses() { + // CHECK: FunctionTemplateDecl{{.*}}TemplUses + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}T + // CHECK-NEXT: FunctionDecl{{.*}}TemplUses + // CHECK-NEXT: CompoundStmt + +#pragma acc data async(some_int()) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: async clause + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()' + // CHECK-NEXT: NullStmt +#pragma acc enter data async(T{}) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: async clause + // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list + // CHECK-NEXT: InitListExpr{{.*}}'void' +#pragma acc exit data async + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: async clause + + // Instantiations + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()' implicit_instantiation + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: async clause + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()' + // CHECK-NEXT: NullStmt + + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: async clause + // CHECK-NEXT: CXXFunctionalCastExpr + // CHECK-NEXT: InitListExpr{{.*}}'int' + + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: async clause +} +void Inst() { + TemplUses(); +} + + +#endif // PCH_HELPER diff --git a/clang/test/SemaOpenACC/data-construct-async-clause.c b/clang/test/SemaOpenACC/data-construct-async-clause.c new file mode 100644 index 000000000000..053cc976939b --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-async-clause.c @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +void Test() { + int I; + struct NotConvertible{} NC; + // No special rules for this clause on the data constructs, so not much to + // test that isn't covered by combined/compute. + // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} +#pragma acc data copyin(I) async(I) + ; + // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} +#pragma acc enter data copyin(I) async(I) + // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} +#pragma acc exit data copyout(I) async(I) + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} + // expected-error@+1{{OpenACC 'async' clause is not valid on 'host_data' directive}} +#pragma acc host_data use_device(I) async(I) + ; + + // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} + // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc data copyin(NC) async(NC) + ; + // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} + // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc enter data copyin(NC) async(NC) + // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} + // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc exit data copyout(NC) async(NC) + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} + // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc host_data use_device(NC) async(NC) + ; + + // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} + // expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}} + // expected-note@+1{{previous clause is here}} +#pragma acc data copyin(I) async(I) async(I) + ; + // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} + // expected-error@+2{{expected ')'}} + // expected-note@+1{{to match this '('}} +#pragma acc enter data copyin(I) async(I, I) +} diff --git a/clang/test/SemaOpenACC/data-construct-device_type-clause.c b/clang/test/SemaOpenACC/data-construct-device_type-clause.c index 80cb466555b9..65513056f66b 100644 --- a/clang/test/SemaOpenACC/data-construct-device_type-clause.c +++ b/clang/test/SemaOpenACC/data-construct-device_type-clause.c @@ -2,7 +2,6 @@ void uses() { int Var; - // expected-warning@+1{{OpenACC clause 'async' not yet implemented}} #pragma acc data device_type(foo) async ; // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 1b3c1985258e..b79899cc97a1 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -55,7 +55,6 @@ void AtLeastOneOf() { #pragma acc data if(Var) ; - // expected-warning@+1{{OpenACC clause 'async' not yet implemented}} #pragma acc data async ; @@ -80,7 +79,6 @@ void AtLeastOneOf() { // they don't have at least one of the above clauses. #pragma acc enter data if(Var) - // expected-warning@+1{{OpenACC clause 'async' not yet implemented}} #pragma acc enter data async // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc enter data wait @@ -98,7 +96,6 @@ void AtLeastOneOf() { // they don't have at least one of the above clauses. #pragma acc exit data if(Var) - // expected-warning@+1{{OpenACC clause 'async' not yet implemented}} #pragma acc exit data async // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc exit data wait @@ -167,7 +164,6 @@ void DataRules() { // expected-note@+1{{previous clause is here}} #pragma acc data device_type(*) if(Var) ; - // expected-warning@+1{{OpenACC clause 'async' not yet implemented}} #pragma acc data device_type(*) async ; // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} -- cgit v1.2.3 From 4e2a9e50f6dd6760b12838517c7f85a0c9032921 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Thu, 12 Dec 2024 11:24:36 -0800 Subject: [libc] Breakup freelist_malloc into separate files (#98784) This better matches the structure we use for the rest of libc. --- libc/config/baremetal/aarch64/entrypoints.txt | 1 - libc/config/baremetal/arm/entrypoints.txt | 1 - libc/config/baremetal/riscv/entrypoints.txt | 1 - libc/src/__support/CMakeLists.txt | 8 +++- libc/src/__support/freelist_heap.cpp | 19 +++++++++ libc/src/stdlib/CMakeLists.txt | 38 +++++------------ libc/src/stdlib/baremetal/CMakeLists.txt | 50 ++++++++++++++++++++++ libc/src/stdlib/baremetal/aligned_alloc.cpp | 21 +++++++++ libc/src/stdlib/baremetal/calloc.cpp | 21 +++++++++ libc/src/stdlib/baremetal/free.cpp | 19 +++++++++ libc/src/stdlib/baremetal/malloc.cpp | 21 +++++++++ libc/src/stdlib/baremetal/realloc.cpp | 21 +++++++++ libc/src/stdlib/freelist_malloc.cpp | 42 ------------------ libc/test/src/__support/CMakeLists.txt | 2 - libc/test/src/__support/freelist_heap_test.cpp | 4 ++ libc/test/src/__support/freelist_malloc_test.cpp | 54 ------------------------ 16 files changed, 193 insertions(+), 130 deletions(-) create mode 100644 libc/src/__support/freelist_heap.cpp create mode 100644 libc/src/stdlib/baremetal/aligned_alloc.cpp create mode 100644 libc/src/stdlib/baremetal/calloc.cpp create mode 100644 libc/src/stdlib/baremetal/free.cpp create mode 100644 libc/src/stdlib/baremetal/malloc.cpp create mode 100644 libc/src/stdlib/baremetal/realloc.cpp delete mode 100644 libc/src/stdlib/freelist_malloc.cpp delete mode 100644 libc/test/src/__support/freelist_malloc_test.cpp diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt index 71b49d989429..694cd7b1993c 100644 --- a/libc/config/baremetal/aarch64/entrypoints.txt +++ b/libc/config/baremetal/aarch64/entrypoints.txt @@ -184,7 +184,6 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdlib.div libc.src.stdlib.exit libc.src.stdlib.free - libc.src.stdlib.freelist_malloc libc.src.stdlib.labs libc.src.stdlib.ldiv libc.src.stdlib.llabs diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt index 71b49d989429..694cd7b1993c 100644 --- a/libc/config/baremetal/arm/entrypoints.txt +++ b/libc/config/baremetal/arm/entrypoints.txt @@ -184,7 +184,6 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdlib.div libc.src.stdlib.exit libc.src.stdlib.free - libc.src.stdlib.freelist_malloc libc.src.stdlib.labs libc.src.stdlib.ldiv libc.src.stdlib.llabs diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt index e84d139d09dd..6dc5df830eb0 100644 --- a/libc/config/baremetal/riscv/entrypoints.txt +++ b/libc/config/baremetal/riscv/entrypoints.txt @@ -180,7 +180,6 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdlib.div libc.src.stdlib.exit libc.src.stdlib.free - libc.src.stdlib.freelist_malloc libc.src.stdlib.labs libc.src.stdlib.ldiv libc.src.stdlib.llabs diff --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt index 8f85740f70a0..70ed67c156d1 100644 --- a/libc/src/__support/CMakeLists.txt +++ b/libc/src/__support/CMakeLists.txt @@ -48,13 +48,19 @@ add_header_library( .freetrie ) -add_header_library( +add_object_library( freelist_heap + SRCS + freelist_heap.cpp HDRS freelist_heap.h + COMPILE_OPTIONS + -DLIBC_FREELIST_MALLOC_SIZE=${LIBC_CONF_FREELIST_MALLOC_BUFFER_SIZE} DEPENDS .block + .freelist .freestore + .freetrie libc.src.__support.CPP.cstddef libc.src.__support.CPP.array libc.src.__support.CPP.optional diff --git a/libc/src/__support/freelist_heap.cpp b/libc/src/__support/freelist_heap.cpp new file mode 100644 index 000000000000..4deb0e0f09e2 --- /dev/null +++ b/libc/src/__support/freelist_heap.cpp @@ -0,0 +1,19 @@ +//===-- Implementation for freelist_heap ----------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +static LIBC_CONSTINIT FreeListHeap freelist_heap_symbols; +FreeListHeap *freelist_heap = &freelist_heap_symbols; + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt index 14d06534a604..40ba9ead9a7a 100644 --- a/libc/src/stdlib/CMakeLists.txt +++ b/libc/src/stdlib/CMakeLists.txt @@ -323,7 +323,7 @@ add_entrypoint_object( .rand_util ) -if(NOT LIBC_TARGET_OS_IS_GPU) +if(NOT LIBC_TARGET_OS_IS_BAREMETAL AND NOT LIBC_TARGET_OS_IS_GPU) if(LLVM_LIBC_INCLUDE_SCUDO) set(SCUDO_DEPS "") @@ -349,7 +349,7 @@ if(NOT LIBC_TARGET_OS_IS_GPU) list(APPEND SCUDO_DEPS RTScudoStandalone.${LIBC_TARGET_ARCHITECTURE_FOR_SCUDO} RTScudoStandaloneCWrappers.${LIBC_TARGET_ARCHITECTURE_FOR_SCUDO}) - + if (COMPILER_RT_BUILD_GWP_ASAN) list(APPEND SCUDO_DEPS RTGwpAsan.${LIBC_TARGET_ARCHITECTURE_FOR_SCUDO} @@ -389,32 +389,8 @@ if(NOT LIBC_TARGET_OS_IS_GPU) ${SCUDO_DEPS} ) else() - # Only use freelist malloc for baremetal targets. - add_entrypoint_object( - freelist_malloc - SRCS - freelist_malloc.cpp - HDRS - malloc.h - DEPENDS - libc.src.__support.freelist_heap - ) - get_target_property(freelist_malloc_is_skipped libc.src.stdlib.freelist_malloc "SKIPPED") - if(LIBC_TARGET_OS_IS_BAREMETAL AND NOT freelist_malloc_is_skipped) - add_entrypoint_object( - malloc - ALIAS - DEPENDS - .freelist_malloc - ) - else() - add_entrypoint_external( - malloc - ) - endif() - add_entrypoint_external( - free + malloc ) add_entrypoint_external( calloc @@ -425,6 +401,12 @@ if(NOT LIBC_TARGET_OS_IS_GPU) add_entrypoint_external( aligned_alloc ) + add_entrypoint_external( + free + ) + add_entrypoint_external( + mallopt + ) endif() endif() @@ -513,7 +495,7 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) endif() -if(LIBC_TARGET_OS_IS_GPU) +if(LIBC_TARGET_OS_IS_BAREMETAL OR LIBC_TARGET_OS_IS_GPU) add_entrypoint_object( malloc ALIAS diff --git a/libc/src/stdlib/baremetal/CMakeLists.txt b/libc/src/stdlib/baremetal/CMakeLists.txt index 551a83a36b20..67ab1979e4d1 100644 --- a/libc/src/stdlib/baremetal/CMakeLists.txt +++ b/libc/src/stdlib/baremetal/CMakeLists.txt @@ -5,3 +5,53 @@ add_entrypoint_object( HDRS ../abort.h ) + +add_entrypoint_object( + malloc + SRCS + malloc.cpp + HDRS + ../malloc.h + DEPENDS + libc.src.__support.freelist_heap +) + +add_entrypoint_object( + free + SRCS + free.cpp + HDRS + ../free.h + DEPENDS + libc.src.__support.freelist_heap +) + +add_entrypoint_object( + calloc + SRCS + calloc.cpp + HDRS + ../calloc.h + DEPENDS + libc.src.__support.freelist_heap +) + +add_entrypoint_object( + realloc + SRCS + realloc.cpp + HDRS + ../realloc.h + DEPENDS + libc.src.__support.freelist_heap +) + +add_entrypoint_object( + aligned_alloc + SRCS + aligned_alloc.cpp + HDRS + ../aligned_alloc.h + DEPENDS + libc.src.__support.freelist_heap +) diff --git a/libc/src/stdlib/baremetal/aligned_alloc.cpp b/libc/src/stdlib/baremetal/aligned_alloc.cpp new file mode 100644 index 000000000000..e9548719c3a6 --- /dev/null +++ b/libc/src/stdlib/baremetal/aligned_alloc.cpp @@ -0,0 +1,21 @@ +//===-- Implementation for freelist_malloc --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/stdlib/aligned_alloc.h" +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(void *, aligned_alloc, (size_t alignment, size_t size)) { + return freelist_heap->aligned_allocate(alignment, size); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/calloc.cpp b/libc/src/stdlib/baremetal/calloc.cpp new file mode 100644 index 000000000000..2b3b83cebc8a --- /dev/null +++ b/libc/src/stdlib/baremetal/calloc.cpp @@ -0,0 +1,21 @@ +//===-- Implementation for freelist_malloc --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/stdlib/calloc.h" +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(void *, calloc, (size_t num, size_t size)) { + return freelist_heap->calloc(num, size); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/free.cpp b/libc/src/stdlib/baremetal/free.cpp new file mode 100644 index 000000000000..1e25fe5f2dcf --- /dev/null +++ b/libc/src/stdlib/baremetal/free.cpp @@ -0,0 +1,19 @@ +//===-- Implementation for freelist_malloc --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/stdlib/free.h" +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(void, free, (void *ptr)) { return freelist_heap->free(ptr); } + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/malloc.cpp b/libc/src/stdlib/baremetal/malloc.cpp new file mode 100644 index 000000000000..a299282667fc --- /dev/null +++ b/libc/src/stdlib/baremetal/malloc.cpp @@ -0,0 +1,21 @@ +//===-- Implementation for freelist_malloc --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/stdlib/malloc.h" +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(void *, malloc, (size_t size)) { + return freelist_heap->allocate(size); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/realloc.cpp b/libc/src/stdlib/baremetal/realloc.cpp new file mode 100644 index 000000000000..fb25c68ec429 --- /dev/null +++ b/libc/src/stdlib/baremetal/realloc.cpp @@ -0,0 +1,21 @@ +//===-- Implementation for freelist_malloc --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/stdlib/realloc.h" +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(void *, realloc, (void *ptr, size_t size)) { + return freelist_heap->realloc(ptr, size); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/freelist_malloc.cpp b/libc/src/stdlib/freelist_malloc.cpp deleted file mode 100644 index fe56fad76937..000000000000 --- a/libc/src/stdlib/freelist_malloc.cpp +++ /dev/null @@ -1,42 +0,0 @@ -//===-- Implementation for freelist_malloc --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" -#include "src/stdlib/aligned_alloc.h" -#include "src/stdlib/calloc.h" -#include "src/stdlib/free.h" -#include "src/stdlib/malloc.h" -#include "src/stdlib/realloc.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -static LIBC_CONSTINIT FreeListHeap freelist_heap_symbols; -FreeListHeap *freelist_heap = &freelist_heap_symbols; - -LLVM_LIBC_FUNCTION(void *, malloc, (size_t size)) { - return freelist_heap->allocate(size); -} - -LLVM_LIBC_FUNCTION(void, free, (void *ptr)) { return freelist_heap->free(ptr); } - -LLVM_LIBC_FUNCTION(void *, calloc, (size_t num, size_t size)) { - return freelist_heap->calloc(num, size); -} - -LLVM_LIBC_FUNCTION(void *, realloc, (void *ptr, size_t size)) { - return freelist_heap->realloc(ptr, size); -} - -LLVM_LIBC_FUNCTION(void *, aligned_alloc, (size_t alignment, size_t size)) { - return freelist_heap->aligned_allocate(alignment, size); -} - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/src/__support/CMakeLists.txt b/libc/test/src/__support/CMakeLists.txt index bcc86effd9a5..59bce9b96e39 100644 --- a/libc/test/src/__support/CMakeLists.txt +++ b/libc/test/src/__support/CMakeLists.txt @@ -63,11 +63,9 @@ if(LLVM_LIBC_FULL_BUILD) SRCS fake_heap.s freelist_heap_test.cpp - freelist_malloc_test.cpp DEPENDS libc.src.__support.CPP.span libc.src.__support.freelist_heap - libc.src.stdlib.freelist_malloc libc.src.string.memcmp libc.src.string.memcpy ) diff --git a/libc/test/src/__support/freelist_heap_test.cpp b/libc/test/src/__support/freelist_heap_test.cpp index 991c158825a8..07b9a09d77bb 100644 --- a/libc/test/src/__support/freelist_heap_test.cpp +++ b/libc/test/src/__support/freelist_heap_test.cpp @@ -9,6 +9,10 @@ #include "src/__support/CPP/span.h" #include "src/__support/freelist_heap.h" #include "src/__support/macros/config.h" +#include "src/stdlib/aligned_alloc.h" +#include "src/stdlib/calloc.h" +#include "src/stdlib/free.h" +#include "src/stdlib/malloc.h" #include "src/string/memcmp.h" #include "src/string/memcpy.h" #include "test/UnitTest/Test.h" diff --git a/libc/test/src/__support/freelist_malloc_test.cpp b/libc/test/src/__support/freelist_malloc_test.cpp deleted file mode 100644 index 793e2498304f..000000000000 --- a/libc/test/src/__support/freelist_malloc_test.cpp +++ /dev/null @@ -1,54 +0,0 @@ -//===-- Unittests for freelist_malloc -------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/__support/freelist_heap.h" -#include "src/stdlib/aligned_alloc.h" -#include "src/stdlib/calloc.h" -#include "src/stdlib/free.h" -#include "src/stdlib/malloc.h" -#include "test/UnitTest/Test.h" - -using LIBC_NAMESPACE::Block; -using LIBC_NAMESPACE::freelist_heap; -using LIBC_NAMESPACE::FreeListHeap; -using LIBC_NAMESPACE::FreeListHeapBuffer; - -TEST(LlvmLibcFreeListMalloc, Malloc) { - constexpr size_t kAllocSize = 256; - constexpr size_t kCallocNum = 4; - constexpr size_t kCallocSize = 64; - - void *ptr1 = LIBC_NAMESPACE::malloc(kAllocSize); - auto *block = Block::from_usable_space(ptr1); - EXPECT_GE(block->inner_size(), kAllocSize); - - LIBC_NAMESPACE::free(ptr1); - ASSERT_NE(block->next(), static_cast(nullptr)); - ASSERT_EQ(block->next()->next(), static_cast(nullptr)); - size_t heap_size = block->inner_size(); - - void *ptr2 = LIBC_NAMESPACE::calloc(kCallocNum, kCallocSize); - ASSERT_EQ(ptr2, ptr1); - EXPECT_GE(block->inner_size(), kCallocNum * kCallocSize); - - for (size_t i = 0; i < kCallocNum * kCallocSize; ++i) - EXPECT_EQ(reinterpret_cast(ptr2)[i], uint8_t(0)); - - LIBC_NAMESPACE::free(ptr2); - EXPECT_EQ(block->inner_size(), heap_size); - - constexpr size_t ALIGN = kAllocSize; - void *ptr3 = LIBC_NAMESPACE::aligned_alloc(ALIGN, kAllocSize); - EXPECT_NE(ptr3, static_cast(nullptr)); - EXPECT_EQ(reinterpret_cast(ptr3) % ALIGN, size_t(0)); - auto *aligned_block = reinterpret_cast(ptr3); - EXPECT_GE(aligned_block->inner_size(), kAllocSize); - - LIBC_NAMESPACE::free(ptr3); - EXPECT_EQ(block->inner_size(), heap_size); -} -- cgit v1.2.3 From b03470b81485281d9f2bdce5e44cc2cac4220d97 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 12 Dec 2024 11:46:47 -0800 Subject: [RISCV] Use a switch instead of an if/else chain. NFC --- llvm/lib/Target/RISCV/RISCVInstrInfo.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp index 01dc9b9c3efc..91f8a2f47e21 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp @@ -3199,21 +3199,27 @@ std::string RISCVInstrInfo::createMIROperandComment( // Print the full VType operand of vsetvli/vsetivli instructions, and the SEW // operand of vector codegen pseudos. - if (OpInfo.OperandType == RISCVOp::OPERAND_VTYPEI10 || - OpInfo.OperandType == RISCVOp::OPERAND_VTYPEI11) { + switch (OpInfo.OperandType) { + case RISCVOp::OPERAND_VTYPEI10: + case RISCVOp::OPERAND_VTYPEI11: { unsigned Imm = Op.getImm(); RISCVVType::printVType(Imm, OS); - } else if (OpInfo.OperandType == RISCVOp::OPERAND_SEW) { + break; + } + case RISCVOp::OPERAND_SEW: { unsigned Log2SEW = Op.getImm(); unsigned SEW = Log2SEW ? 1 << Log2SEW : 8; assert(RISCVVType::isValidSEW(SEW) && "Unexpected SEW"); OS << "e" << SEW; - } else if (OpInfo.OperandType == RISCVOp::OPERAND_VEC_POLICY) { + break; + } + case RISCVOp::OPERAND_VEC_POLICY: unsigned Policy = Op.getImm(); assert(Policy <= (RISCVII::TAIL_AGNOSTIC | RISCVII::MASK_AGNOSTIC) && "Invalid Policy Value"); OS << (Policy & RISCVII::TAIL_AGNOSTIC ? "ta" : "tu") << ", " << (Policy & RISCVII::MASK_AGNOSTIC ? "ma" : "mu"); + break; } return Comment; -- cgit v1.2.3 From 33b910cde3b305a49c98c6de88dbc22ced9dea61 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Thu, 12 Dec 2024 20:57:39 +0100 Subject: [clang] Fix the post-filtering heuristic for GSLPointer. (#114044) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lifetime analyzer processes GSL pointers: - when encountering a constructor for a `gsl::pointer`, the analyzer continues traversing the constructor argument, regardless of whether the parameter has a `lifetimebound` annotation. This aims to catch cases where a GSL pointer is constructed from a GSL owner, either directly (e.g., `FooPointer(FooOwner)`) or through a chain of GSL pointers (e.g., `FooPointer(FooPointer(FooOwner))`); - When a temporary object is reported in the callback, the analyzer has heuristics to exclude non-owner types, aiming to avoid false positives (like `FooPointer(FooPointer())`). In the problematic case (discovered in https://github.com/llvm/llvm-project/pull/112751#issuecomment-2441055471) of `return foo.get();`: - When the analyzer reports the local object `foo`, the `Path` is `[GslPointerInit, Lifetimebound]`. - The `Path` goes through [`pathOnlyHandlesGslPointer`](https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/CheckExprLifetime.cpp#L1136) and isn’t filtered out by the [[heuristics]](because `foo` is an owner type), the analyzer treats it as the `FooPointer(FooOwner())` scenario, thus triggering a diagnostic. Filtering out base on the object 'foo' is wrong, because the GSLPointer is constructed from the return result of the `foo.get()`. The patch fixes this by teaching the heuristic to use the return result (only `const GSLOwner&` is considered) of the lifetimebound annotated function. --- clang/docs/ReleaseNotes.rst | 2 + clang/lib/Sema/CheckExprLifetime.cpp | 114 ++++++++++++++++++----- clang/test/Sema/Inputs/lifetime-analysis.h | 5 + clang/test/Sema/warn-lifetime-analysis-nocfg.cpp | 90 +++++++++++++++++- 4 files changed, 187 insertions(+), 24 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 26fa986810a4..befa411e882b 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -614,6 +614,8 @@ Improvements to Clang's diagnostics - Clang now diagnoses ``[[deprecated]]`` attribute usage on local variables (#GH90073). +- Fix false positives when `[[gsl::Owner/Pointer]]` and `[[clang::lifetimebound]]` are used together. + - Improved diagnostic message for ``__builtin_bit_cast`` size mismatch (#GH115870). - Clang now omits shadow warnings for enum constants in separate class scopes (#GH62588). diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp index 868081292bc3..843fdb4a65cd 100644 --- a/clang/lib/Sema/CheckExprLifetime.cpp +++ b/clang/lib/Sema/CheckExprLifetime.cpp @@ -367,6 +367,8 @@ static bool shouldTrackImplicitObjectArg(const CXXMethodDecl *Callee) { if (Callee->getReturnType()->isReferenceType()) { if (!Callee->getIdentifier()) { auto OO = Callee->getOverloadedOperator(); + if (!Callee->getParent()->hasAttr()) + return false; return OO == OverloadedOperatorKind::OO_Subscript || OO == OverloadedOperatorKind::OO_Star; } @@ -1152,6 +1154,86 @@ static bool pathOnlyHandlesGslPointer(const IndirectLocalPath &Path) { } return false; } +// Result of analyzing the Path for GSLPointer. +enum AnalysisResult { + // Path does not correspond to a GSLPointer. + NotGSLPointer, + + // A relevant case was identified. + Report, + // Stop the entire traversal. + Abandon, + // Skip this step and continue traversing inner AST nodes. + Skip, +}; +// Analyze cases where a GSLPointer is initialized or assigned from a +// temporary owner object. +static AnalysisResult analyzePathForGSLPointer(const IndirectLocalPath &Path, + Local L) { + if (!pathOnlyHandlesGslPointer(Path)) + return NotGSLPointer; + + // At this point, Path represents a series of operations involving a + // GSLPointer, either in the process of initialization or assignment. + + // Note: A LifetimeBoundCall can appear interleaved in this sequence. + // For example: + // const std::string& Ref(const std::string& a [[clang::lifetimebound]]); + // string_view abc = Ref(std::string()); + // The "Path" is [GSLPointerInit, LifetimeboundCall], where "L" is the + // temporary "std::string()" object. We need to check the return type of the + // function with the lifetimebound attribute. + if (Path.back().Kind == IndirectLocalPathEntry::LifetimeBoundCall) { + // The lifetimebound applies to the implicit object parameter of a method. + const FunctionDecl *FD = + llvm::dyn_cast_or_null(Path.back().D); + // The lifetimebound applies to a function parameter. + if (const auto *PD = llvm::dyn_cast(Path.back().D)) + FD = llvm::dyn_cast(PD->getDeclContext()); + + if (isa_and_present(FD)) { + // Constructor case: the parameter is annotated with lifetimebound + // e.g., GSLPointer(const S& s [[clang::lifetimebound]]) + // We still respect this case even the type S is not an owner. + return Report; + } + // Check the return type, e.g. + // const GSLOwner& func(const Foo& foo [[clang::lifetimebound]]) + // GSLPointer func(const Foo& foo [[clang::lifetimebound]]) + if (FD && + ((FD->getReturnType()->isReferenceType() && + isRecordWithAttr(FD->getReturnType()->getPointeeType())) || + isPointerLikeType(FD->getReturnType()))) + return Report; + + return Abandon; + } + + if (isa(L)) { + // We do not want to follow the references when returning a pointer + // originating from a local owner to avoid the following false positive: + // int &p = *localUniquePtr; + // someContainer.add(std::move(localUniquePtr)); + // return p; + if (!pathContainsInit(Path) && isRecordWithAttr(L->getType())) + return Report; + return Abandon; + } + + // The GSLPointer is from a temporary object. + auto *MTE = dyn_cast(L); + + bool IsGslPtrValueFromGslTempOwner = + MTE && !MTE->getExtendingDecl() && + isRecordWithAttr(MTE->getType()); + // Skipping a chain of initializing gsl::Pointer annotated objects. + // We are looking only for the final source to find out if it was + // a local or temporary owner or the address of a local + // variable/param. + if (!IsGslPtrValueFromGslTempOwner) + return Skip; + return Report; +} static bool isAssignmentOperatorLifetimeBound(CXXMethodDecl *CMD) { return CMD && isNormalAssignmentOperator(CMD) && CMD->param_size() == 1 && @@ -1189,27 +1271,17 @@ checkExprLifetimeImpl(Sema &SemaRef, const InitializedEntity *InitEntity, auto *MTE = dyn_cast(L); - bool IsGslPtrValueFromGslTempOwner = false; - if (pathOnlyHandlesGslPointer(Path)) { - if (isa(L)) { - // We do not want to follow the references when returning a pointer - // originating from a local owner to avoid the following false positive: - // int &p = *localUniquePtr; - // someContainer.add(std::move(localUniquePtr)); - // return p; - if (pathContainsInit(Path) || - !isRecordWithAttr(L->getType())) - return false; - } else { - IsGslPtrValueFromGslTempOwner = - MTE && !MTE->getExtendingDecl() && - isRecordWithAttr(MTE->getType()); - // Skipping a chain of initializing gsl::Pointer annotated objects. - // We are looking only for the final source to find out if it was - // a local or temporary owner or the address of a local variable/param. - if (!IsGslPtrValueFromGslTempOwner) - return true; - } + bool IsGslPtrValueFromGslTempOwner = true; + switch (analyzePathForGSLPointer(Path, L)) { + case Abandon: + return false; + case Skip: + return true; + case NotGSLPointer: + IsGslPtrValueFromGslTempOwner = false; + LLVM_FALLTHROUGH; + case Report: + break; } switch (LK) { diff --git a/clang/test/Sema/Inputs/lifetime-analysis.h b/clang/test/Sema/Inputs/lifetime-analysis.h index 5c151385b1fe..f888e6ab94bb 100644 --- a/clang/test/Sema/Inputs/lifetime-analysis.h +++ b/clang/test/Sema/Inputs/lifetime-analysis.h @@ -128,6 +128,11 @@ struct reference_wrapper { template reference_wrapper ref(T& t) noexcept; +template +struct [[gsl::Pointer]] iterator { + T& operator*() const; +}; + struct false_type { static constexpr bool value = false; constexpr operator bool() const noexcept { return value; } diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp index fc876926ba2e..45b4dc838f44 100644 --- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp +++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp @@ -604,8 +604,9 @@ struct [[gsl::Pointer]] Span { // Pointer from Owner std::string_view test5() { - std::string_view a = StatusOr().valueLB(); // expected-warning {{object backing the pointer will be dest}} - return StatusOr().valueLB(); // expected-warning {{returning address of local temporary}} + // The Owner doesn't own the object which its inner pointer points to. + std::string_view a = StatusOr().valueLB(); // OK + return StatusOr().valueLB(); // OK // No dangling diagnostics on non-lifetimebound methods. std::string_view b = StatusOr().valueNoLB(); @@ -652,7 +653,7 @@ Span test10(StatusOr> aa) { // Pointer> from Owner> Span test11(StatusOr> aa) { - return aa.valueLB(); // expected-warning {{address of stack memory}} + return aa.valueLB(); // OK return aa.valueNoLB(); // OK. } @@ -693,3 +694,86 @@ void test() { auto y = std::set{}.begin(); // expected-warning {{object backing the pointer}} } } // namespace GH118064 + +namespace LifetimeboundInterleave { + +const std::string& Ref(const std::string& abc [[clang::lifetimebound]]); + +std::string_view TakeSv(std::string_view abc [[clang::lifetimebound]]); +std::string_view TakeStrRef(const std::string& abc [[clang::lifetimebound]]); +std::string_view TakeStr(std::string abc [[clang::lifetimebound]]); + +std::string_view test1() { + std::string_view t1 = Ref(std::string()); // expected-warning {{object backing}} + t1 = Ref(std::string()); // expected-warning {{object backing}} + return Ref(std::string()); // expected-warning {{returning address}} + + std::string_view t2 = TakeSv(std::string()); // expected-warning {{object backing}} + t2 = TakeSv(std::string()); // expected-warning {{object backing}} + return TakeSv(std::string()); // expected-warning {{returning address}} + + std::string_view t3 = TakeStrRef(std::string()); // expected-warning {{temporary}} + t3 = TakeStrRef(std::string()); // expected-warning {{object backing}} + return TakeStrRef(std::string()); // expected-warning {{returning address}} + + + std::string_view t4 = TakeStr(std::string()); + t4 = TakeStr(std::string()); + return TakeStr(std::string()); +} + +template +struct Foo { + const T& get() const [[clang::lifetimebound]]; + const T& getNoLB() const; +}; +std::string_view test2(Foo r1, Foo r2) { + std::string_view t1 = Foo().get(); // expected-warning {{object backing}} + t1 = Foo().get(); // expected-warning {{object backing}} + return r1.get(); // expected-warning {{address of stack}} + + std::string_view t2 = Foo().get(); + t2 = Foo().get(); + return r2.get(); + + // no warning on no-LB-annotated method. + std::string_view t3 = Foo().getNoLB(); + t3 = Foo().getNoLB(); + return r1.getNoLB(); +} + +struct Bar {}; +struct [[gsl::Pointer]] Pointer { + Pointer(const Bar & bar [[clang::lifetimebound]]); +}; +Pointer test3(Bar bar) { + Pointer p = Pointer(Bar()); // expected-warning {{temporary}} + p = Pointer(Bar()); // expected-warning {{object backing}} + return bar; // expected-warning {{address of stack}} +} + +template +struct MySpan { + MySpan(const std::vector& v); + using iterator = std::iterator; + iterator begin() const [[clang::lifetimebound]]; +}; +template +typename MySpan::iterator ReturnFirstIt(const MySpan& v [[clang::lifetimebound]]); + +void test4() { + std::vector v{1}; + // MySpan doesn't own any underlying T objects, the pointee object of + // the MySpan iterator is still alive when the whole span is destroyed, thus + // no diagnostic. + const int& t1 = *MySpan(v).begin(); + const int& t2 = *ReturnFirstIt(MySpan(v)); + // Ideally, we would diagnose the following case, but due to implementation + // constraints, we do not. + const int& t4 = *MySpan(std::vector{}).begin(); + + auto it1 = MySpan(v).begin(); // expected-warning {{temporary whose address is use}} + auto it2 = ReturnFirstIt(MySpan(v)); // expected-warning {{temporary whose address is used}} +} + +} // namespace LifetimeboundInterleave -- cgit v1.2.3 From 4e828f8d741ff61317bb1e0b67f22e274632b07a Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Thu, 12 Dec 2024 20:06:20 +0000 Subject: [VPlan] Perform DT expensive input DT verification earlier (NFC). After 6c8f41d33674, DT adjustments for the skeleton are applied as VPBBs are executed. Move input DT verification up before starting to execute any VPBBs to avoid checking DT while the CFG and DT are in an incomplete state. This fixes a number of verification failures with expensive checks enabled, including https://lab.llvm.org/buildbot/#/builders/16/builds/10584 --- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 82b6282a2adf..122dc1db0b59 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -7774,6 +7774,10 @@ DenseMap LoopVectorizationPlanner::executePlan( VPTransformState State(&TTI, BestVF, BestUF, LI, DT, ILV.Builder, &ILV, &BestVPlan, Legal->getWidestInductionType()); +#ifdef EXPENSIVE_CHECKS + assert(DT->verify(DominatorTree::VerificationLevel::Fast)); +#endif + // 0. Generate SCEV-dependent code into the preheader, including TripCount, // before making any changes to the CFG. if (!BestVPlan.getPreheader()->empty()) { @@ -7794,10 +7798,6 @@ DenseMap LoopVectorizationPlanner::executePlan( if (VectorizingEpilogue) VPlanTransforms::removeDeadRecipes(BestVPlan); -#ifdef EXPENSIVE_CHECKS - assert(DT->verify(DominatorTree::VerificationLevel::Fast)); -#endif - // Only use noalias metadata when using memory checks guaranteeing no overlap // across all iterations. const LoopAccessInfo *LAI = ILV.Legal->getLAI(); -- cgit v1.2.3 From afcb7d4a2eab51977497e43ce6539d2b0ca01071 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Thu, 12 Dec 2024 11:58:31 -0800 Subject: [OpenACC] Implement 'wait' sema for data constructs This is once again simply enabling this for 'data', 'enter data', and 'exit data' (and ensuring we error for 'host_data'). Implementation is very simply to enable it rather than emit the not-implemented diagnostic. --- clang/lib/Sema/SemaOpenACC.cpp | 10 +- .../test/AST/ast-print-openacc-data-construct.cpp | 21 ++ clang/test/ParserOpenACC/parse-clauses.c | 1 - .../data-construct-device_type-clause.c | 1 - clang/test/SemaOpenACC/data-construct-wait-ast.cpp | 230 +++++++++++++++++++++ .../test/SemaOpenACC/data-construct-wait-clause.c | 50 +++++ clang/test/SemaOpenACC/data-construct.cpp | 4 - 7 files changed, 307 insertions(+), 10 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-wait-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-wait-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index f438ec193bf0..655d3b4ad634 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -1070,11 +1070,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitDevicePtrClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitWaitClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); return OpenACCWaitClause::Create( diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 508dc816b0fa..8e1d3efbf3c4 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -29,6 +29,7 @@ void foo() { ; int i; + int *iPtr; int array[5]; // CHECK: #pragma acc data if(i == array[1]) @@ -51,4 +52,24 @@ void foo() { #pragma acc enter data copyin(i) async(i) // CHECK: #pragma acc exit data async #pragma acc exit data copyout(i) async + +// CHECK: #pragma acc data wait +#pragma acc data default(none) wait() + ; + +// CHECK: #pragma acc enter data wait() +#pragma acc enter data copyin(Var) wait() + +// CHECK: #pragma acc exit data wait(*iPtr, i) +#pragma acc exit data copyout(Var) wait(*iPtr, i) + +// CHECK: #pragma acc data wait(queues: *iPtr, i) +#pragma acc data default(none) wait(queues:*iPtr, i) + ; + +// CHECK: #pragma acc enter data wait(devnum: i : *iPtr, i) +#pragma acc enter data copyin(Var) wait(devnum:i:*iPtr, i) + +// CHECK: #pragma acc exit data wait(devnum: i : queues: *iPtr, i) +#pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i) } diff --git a/clang/test/ParserOpenACC/parse-clauses.c b/clang/test/ParserOpenACC/parse-clauses.c index bb8c76200e8d..558e61d666fd 100644 --- a/clang/test/ParserOpenACC/parse-clauses.c +++ b/clang/test/ParserOpenACC/parse-clauses.c @@ -19,7 +19,6 @@ void func() { // expected-error@+1{{invalid OpenACC clause 'invalid'}} #pragma acc enter data finalize invalid invalid finalize - // expected-warning@+2{{OpenACC clause 'wait' not yet implemented, clause ignored}} // expected-warning@+1{{OpenACC clause 'finalize' not yet implemented, clause ignored}} #pragma acc enter data wait finalize diff --git a/clang/test/SemaOpenACC/data-construct-device_type-clause.c b/clang/test/SemaOpenACC/data-construct-device_type-clause.c index 65513056f66b..f675c2fa6a88 100644 --- a/clang/test/SemaOpenACC/data-construct-device_type-clause.c +++ b/clang/test/SemaOpenACC/data-construct-device_type-clause.c @@ -4,7 +4,6 @@ void uses() { int Var; #pragma acc data device_type(foo) async ; - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc data device_type(foo) wait ; #pragma acc data device_type(foo) dtype(false) diff --git a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp new file mode 100644 index 000000000000..40409099d805 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp @@ -0,0 +1,230 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int some_int(); +long some_long(); + +void NormalUses() { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK-NEXT: CompoundStmt + + int I; + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl + +#pragma acc data copyin(I) wait + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + // CHECK-NEXT: NullStmt +#pragma acc enter data copyin(I) wait() + // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> +#pragma acc exit data copyout(I) wait(some_int(), some_long()) + // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'long' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' +#pragma acc data copyin(I) wait(queues:some_int(), some_long()) + ; + // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: wait clause has queues tag + // CHECK-NEXT: <<>> + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'long' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' + // CHECK-NEXT: NullStmt +#pragma acc enter data copyin(I) wait(devnum: some_int() :some_int(), some_long()) + // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: wait clause has devnum + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'long' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' +#pragma acc exit data copyout(I) wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long()) + // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: wait clause has devnum has queues tag + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'long' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' + // CHECK-NEXT: wait clause has devnum has queues tag + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'int' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' + // CHECK-NEXT: CallExpr{{.*}}'long' + // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' + // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' +} + +template +void TemplUses(U u) { + // CHECK: FunctionTemplateDecl + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + + U I; + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl + +#pragma acc data copyin(I) wait + ; + // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + // CHECK-NEXT: NullStmt + +#pragma acc enter data copyin(I) wait() + // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + +#pragma acc exit data copyout(I) wait(U::value, u) + // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' + // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' + +#pragma acc data copyin(I) wait(queues: U::value, u) + ; + // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: wait clause has queues tag + // CHECK-NEXT: <<>> + // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' + // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: NullStmt + +#pragma acc enter data copyin(I) wait(devnum:u:queues: U::value, u) + // CHECK: OpenACCEnterDataConstruct{{.*}}data + // CHECK-NEXT: wait clause has devnum has queues tag + // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' + // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' + +#pragma acc exit data copyout(I) wait(devnum:u: U::value, u) + // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: wait clause has devnum + // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' + // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' + + // Check the instantiated versions of the above. + // CHECK: FunctionDecl{{.*}} used TemplUses 'void (HasInt)' implicit_instantiation + // CHECK-NEXT: TemplateArgument type 'HasInt' + // CHECK-NEXT: RecordType{{.*}} 'HasInt' + // CHECK-NEXT: CXXRecord{{.*}} 'HasInt' + // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: DeclStmt + // CHECK-NEXT: VarDecl + + // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + // CHECK-NEXT: NullStmt + + // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + + // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: wait clause + // CHECK-NEXT: <<>> + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' + // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' + // CHECK-NEXT: MemberExpr{{.*}} '' .operator char + // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar + + // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: wait clause has queues tag + // CHECK-NEXT: <<>> + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' + // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' + // CHECK-NEXT: MemberExpr{{.*}} '' .operator char + // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar + // CHECK-NEXT: NullStmt + + // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: wait clause has devnum has queues tag + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' + // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' + // CHECK-NEXT: MemberExpr{{.*}} '' .operator char + // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' + // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' + // CHECK-NEXT: MemberExpr{{.*}} '' .operator char + // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar + + // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: wait clause has devnum + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' + // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' + // CHECK-NEXT: MemberExpr{{.*}} '' .operator char + // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' + // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' + // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' + // CHECK-NEXT: MemberExpr{{.*}} '' .operator char + // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar +} + +struct HasInt { + using IntTy = int; + using ShortTy = short; + static constexpr int value = 1; + + operator char(); +}; + +void Inst() { + TemplUses({}); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-wait-clause.c b/clang/test/SemaOpenACC/data-construct-wait-clause.c new file mode 100644 index 000000000000..50a29df8b03b --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-wait-clause.c @@ -0,0 +1,50 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +struct NotConvertible{} NC; +short getS(); +int getI(); + +void uses() { + int arr[5]; + + // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} +#pragma acc data copyin(arr[0]) wait + ; + + // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} +#pragma acc enter data copyin(arr[0]) wait() + + // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} +#pragma acc exit data copyout(arr[0]) wait(getS(), getI()) + + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} + // expected-error@+1{{OpenACC 'wait' clause is not valid on 'host_data' directive}} +#pragma acc host_data use_device(arr[0]) wait(getS(), getI()) + ; + + // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} +#pragma acc data copyin(arr[0]) wait(devnum:getS(): getI()) + ; + + // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} +#pragma acc enter data copyin(arr[0]) wait(devnum:getS(): queues: getI()) wait(devnum:getI(): queues: getS(), getI(), 5) + + // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} + // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc exit data copyout(arr[0]) wait(devnum:NC : 5) + + // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} + // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc data copyin(arr[0]) wait(devnum:5 : NC) + ; + + // expected-warning@+4{{OpenACC clause 'copyin' not yet implemented}} + // expected-error@+3{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}} + // expected-error@+2{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}} + // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} +#pragma acc enter data copyin(arr[0]) wait(devnum:arr : queues: arr, NC, 5) + + // expected-error@+1{{OpenACC 'wait' clause is not valid on 'loop' directive}} +#pragma acc loop wait + for(int i = 5; i < 10;++i); +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index b79899cc97a1..1e145c197834 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -58,7 +58,6 @@ void AtLeastOneOf() { #pragma acc data async ; - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc data wait ; @@ -80,7 +79,6 @@ void AtLeastOneOf() { #pragma acc enter data if(Var) #pragma acc enter data async - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc enter data wait #pragma acc enter data @@ -97,7 +95,6 @@ void AtLeastOneOf() { #pragma acc exit data if(Var) #pragma acc exit data async - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc exit data wait // expected-warning@+1{{OpenACC clause 'finalize' not yet implemented}} #pragma acc exit data finalize @@ -166,7 +163,6 @@ void DataRules() { ; #pragma acc data device_type(*) async ; - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc data device_type(*) wait ; } -- cgit v1.2.3 From 463e93b95f0887145b51edb81b770eeb4463abc5 Mon Sep 17 00:00:00 2001 From: choikwa <5455710+choikwa@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:24:34 -0500 Subject: Reapply [AMDGPU] prevent shrinking udiv/urem if either operand exceeds signed max (#119325) This reverts commit 254d206ee2a337cb38ba347c896f7c6a14c7f218. +Added a fix in ExpandDivRem24 to disqualify if DivNumBits exceed 24. Original commit & msg: ce6e955ac374f2b86cbbb73b2f32174dffd85f25. Handle signed and unsigned path differently in getDivNumBits. Using computeKnownBits, this rejects shrinking unsigned div/rem if operands exceed signed max since we know NumSignBits will be always 0. --- llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp | 39 +++- .../CodeGen/AMDGPU/amdgpu-codegenprepare-idiv.ll | 97 +++++++++ llvm/test/CodeGen/AMDGPU/bypass-div.ll | 119 ++++++++++- llvm/test/CodeGen/AMDGPU/udiv64.ll | 237 +++++---------------- llvm/test/CodeGen/AMDGPU/urem64.ll | 126 +++++------ 5 files changed, 349 insertions(+), 269 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp index 75e20c793016..e02ef56f2344 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp @@ -1195,18 +1195,37 @@ static Value* getMulHu(IRBuilder<> &Builder, Value *LHS, Value *RHS) { int AMDGPUCodeGenPrepareImpl::getDivNumBits(BinaryOperator &I, Value *Num, Value *Den, unsigned AtLeast, bool IsSigned) const { - unsigned LHSSignBits = ComputeNumSignBits(Num, DL, 0, AC, &I); - if (LHSSignBits < AtLeast) - return -1; + assert(Num->getType()->getScalarSizeInBits() == + Den->getType()->getScalarSizeInBits()); + unsigned SSBits = Num->getType()->getScalarSizeInBits(); + if (IsSigned) { + unsigned RHSSignBits = ComputeNumSignBits(Den, DL, 0, AC, &I); + if (RHSSignBits < AtLeast) + return -1; + + unsigned LHSSignBits = ComputeNumSignBits(Num, DL, 0, AC, &I); + if (LHSSignBits < AtLeast) + return -1; + + unsigned SignBits = std::min(LHSSignBits, RHSSignBits); + unsigned DivBits = SSBits - SignBits + 1; + return DivBits; // a SignBit needs to be reserved for shrinking + } + + // All bits are used for unsigned division for Num or Den in range + // (SignedMax, UnsignedMax]. + KnownBits Known = computeKnownBits(Den, DL, 0, AC, &I); + if (Known.isNegative() || !Known.isNonNegative()) + return SSBits; + unsigned RHSSignBits = Known.countMinLeadingZeros(); - unsigned RHSSignBits = ComputeNumSignBits(Den, DL, 0, AC, &I); - if (RHSSignBits < AtLeast) - return -1; + Known = computeKnownBits(Num, DL, 0, AC, &I); + if (Known.isNegative() || !Known.isNonNegative()) + return SSBits; + unsigned LHSSignBits = Known.countMinLeadingZeros(); unsigned SignBits = std::min(LHSSignBits, RHSSignBits); - unsigned DivBits = Num->getType()->getScalarSizeInBits() - SignBits; - if (IsSigned) - ++DivBits; + unsigned DivBits = SSBits - SignBits; return DivBits; } @@ -1220,7 +1239,7 @@ Value *AMDGPUCodeGenPrepareImpl::expandDivRem24(IRBuilder<> &Builder, // If Num bits <= 24, assume 0 signbits. unsigned AtLeast = (SSBits <= 24) ? 0 : (SSBits - 24 + IsSigned); int DivBits = getDivNumBits(I, Num, Den, AtLeast, IsSigned); - if (DivBits == -1) + if (DivBits == -1 || DivBits > 24) return nullptr; return expandDivRem24Impl(Builder, I, Num, Den, DivBits, IsDiv, IsSigned); } diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu-codegenprepare-idiv.ll b/llvm/test/CodeGen/AMDGPU/amdgpu-codegenprepare-idiv.ll index b7436aeb1d53..4f04c15b3d44 100644 --- a/llvm/test/CodeGen/AMDGPU/amdgpu-codegenprepare-idiv.ll +++ b/llvm/test/CodeGen/AMDGPU/amdgpu-codegenprepare-idiv.ll @@ -9999,3 +9999,100 @@ define <2 x i64> @v_udiv_i64_exact(<2 x i64> %num) { %result = udiv exact <2 x i64> %num, ret <2 x i64> %result } + +define i64 @udiv_i64_gt_smax(i8 %size) { +; GFX6-LABEL: udiv_i64_gt_smax: +; GFX6: ; %bb.0: +; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX6-NEXT: v_bfe_i32 v0, v0, 0, 8 +; GFX6-NEXT: v_ashrrev_i32_e32 v1, 31, v0 +; GFX6-NEXT: v_not_b32_e32 v1, v1 +; GFX6-NEXT: v_not_b32_e32 v0, v0 +; GFX6-NEXT: s_mov_b32 s4, 0xcccccccd +; GFX6-NEXT: v_mul_lo_u32 v3, v1, s4 +; GFX6-NEXT: v_mul_hi_u32 v4, v0, s4 +; GFX6-NEXT: s_mov_b32 s6, 0xcccccccc +; GFX6-NEXT: v_mul_hi_u32 v5, v1, s4 +; GFX6-NEXT: v_mul_hi_u32 v2, v0, s6 +; GFX6-NEXT: v_mul_lo_u32 v0, v0, s6 +; GFX6-NEXT: v_add_i32_e32 v3, vcc, v3, v4 +; GFX6-NEXT: v_addc_u32_e32 v4, vcc, 0, v5, vcc +; GFX6-NEXT: v_add_i32_e32 v0, vcc, v0, v3 +; GFX6-NEXT: v_addc_u32_e32 v0, vcc, 0, v2, vcc +; GFX6-NEXT: v_mul_lo_u32 v2, v1, s6 +; GFX6-NEXT: v_mul_hi_u32 v1, v1, s6 +; GFX6-NEXT: v_add_i32_e32 v0, vcc, v4, v0 +; GFX6-NEXT: v_addc_u32_e64 v3, s[4:5], 0, 0, vcc +; GFX6-NEXT: v_add_i32_e32 v0, vcc, v2, v0 +; GFX6-NEXT: v_addc_u32_e32 v1, vcc, v1, v3, vcc +; GFX6-NEXT: v_alignbit_b32 v0, v1, v0, 3 +; GFX6-NEXT: v_lshrrev_b32_e32 v1, 3, v1 +; GFX6-NEXT: s_setpc_b64 s[30:31] +; +; GFX9-LABEL: udiv_i64_gt_smax: +; GFX9: ; %bb.0: +; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX9-NEXT: v_mov_b32_e32 v1, 31 +; GFX9-NEXT: v_not_b32_sdwa v4, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 +; GFX9-NEXT: s_mov_b32 s4, 0xcccccccd +; GFX9-NEXT: v_ashrrev_i32_sdwa v1, v1, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 +; GFX9-NEXT: v_mul_hi_u32 v0, v4, s4 +; GFX9-NEXT: v_not_b32_e32 v5, v1 +; GFX9-NEXT: v_mov_b32_e32 v1, 0 +; GFX9-NEXT: s_mov_b32 s6, 0xcccccccc +; GFX9-NEXT: v_mad_u64_u32 v[2:3], s[4:5], v5, s4, v[0:1] +; GFX9-NEXT: v_mov_b32_e32 v6, v3 +; GFX9-NEXT: v_mov_b32_e32 v3, v1 +; GFX9-NEXT: v_mad_u64_u32 v[0:1], s[4:5], v4, s6, v[2:3] +; GFX9-NEXT: v_mov_b32_e32 v0, v1 +; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v6, v0 +; GFX9-NEXT: v_addc_co_u32_e64 v1, s[4:5], 0, 0, vcc +; GFX9-NEXT: v_mad_u64_u32 v[0:1], s[4:5], v5, s6, v[0:1] +; GFX9-NEXT: v_alignbit_b32 v0, v1, v0, 3 +; GFX9-NEXT: v_lshrrev_b32_e32 v1, 3, v1 +; GFX9-NEXT: s_setpc_b64 s[30:31] + %esize = sext i8 %size to i64 + %minus = sub nuw nsw i64 -1, %esize + %div = udiv i64 %minus, 10 + ret i64 %div +} + +define i64 @udiv_i64_9divbits(i8 %size) { +; GFX6-LABEL: udiv_i64_9divbits: +; GFX6: ; %bb.0: +; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX6-NEXT: v_and_b32_e32 v0, 0xff, v0 +; GFX6-NEXT: v_add_i32_e32 v0, vcc, 1, v0 +; GFX6-NEXT: v_cvt_f32_u32_e32 v0, v0 +; GFX6-NEXT: s_mov_b32 s4, 0x41200000 +; GFX6-NEXT: v_mul_f32_e32 v1, 0x3dcccccd, v0 +; GFX6-NEXT: v_trunc_f32_e32 v1, v1 +; GFX6-NEXT: v_cvt_u32_f32_e32 v2, v1 +; GFX6-NEXT: v_mad_f32 v0, -v1, s4, v0 +; GFX6-NEXT: v_cmp_ge_f32_e64 vcc, |v0|, s4 +; GFX6-NEXT: v_mov_b32_e32 v1, 0 +; GFX6-NEXT: v_addc_u32_e32 v0, vcc, 0, v2, vcc +; GFX6-NEXT: v_and_b32_e32 v0, 0x1ff, v0 +; GFX6-NEXT: s_setpc_b64 s[30:31] +; +; GFX9-LABEL: udiv_i64_9divbits: +; GFX9: ; %bb.0: +; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX9-NEXT: v_mov_b32_e32 v1, 1 +; GFX9-NEXT: v_add_u32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD +; GFX9-NEXT: v_cvt_f32_u32_e32 v0, v0 +; GFX9-NEXT: s_mov_b32 s4, 0x41200000 +; GFX9-NEXT: v_mul_f32_e32 v1, 0x3dcccccd, v0 +; GFX9-NEXT: v_trunc_f32_e32 v1, v1 +; GFX9-NEXT: v_cvt_u32_f32_e32 v2, v1 +; GFX9-NEXT: v_mad_f32 v0, -v1, s4, v0 +; GFX9-NEXT: v_cmp_ge_f32_e64 vcc, |v0|, s4 +; GFX9-NEXT: v_mov_b32_e32 v1, 0 +; GFX9-NEXT: v_addc_co_u32_e32 v0, vcc, 0, v2, vcc +; GFX9-NEXT: v_and_b32_e32 v0, 0x1ff, v0 +; GFX9-NEXT: s_setpc_b64 s[30:31] + %zextend = zext i8 %size to i64 + %num = add nuw nsw i64 1, %zextend + %div = udiv i64 %num, 10 + ret i64 %div +} diff --git a/llvm/test/CodeGen/AMDGPU/bypass-div.ll b/llvm/test/CodeGen/AMDGPU/bypass-div.ll index 5bbea7ecf3f2..5dde193528aa 100644 --- a/llvm/test/CodeGen/AMDGPU/bypass-div.ll +++ b/llvm/test/CodeGen/AMDGPU/bypass-div.ll @@ -1021,8 +1021,116 @@ define i64 @sdiv64_known32(i64 %a, i64 %b) { ; GFX9-LABEL: sdiv64_known32: ; GFX9: ; %bb.0: ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX9-NEXT: v_ashrrev_i32_e32 v2, 31, v1 +; GFX9-NEXT: v_ashrrev_i32_e32 v0, 31, v3 +; GFX9-NEXT: v_or_b32_e32 v5, v2, v0 +; GFX9-NEXT: v_mov_b32_e32 v4, 0 +; GFX9-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] +; GFX9-NEXT: v_mov_b32_e32 v7, v1 +; GFX9-NEXT: v_mov_b32_e32 v6, v3 +; GFX9-NEXT: ; implicit-def: $vgpr4_vgpr5 +; GFX9-NEXT: s_and_saveexec_b64 s[4:5], vcc +; GFX9-NEXT: s_xor_b64 s[6:7], exec, s[4:5] +; GFX9-NEXT: s_cbranch_execz .LBB10_2 +; GFX9-NEXT: ; %bb.1: +; GFX9-NEXT: v_cvt_f32_u32_e32 v1, v6 +; GFX9-NEXT: v_cvt_f32_u32_e32 v3, v0 +; GFX9-NEXT: v_sub_co_u32_e32 v11, vcc, 0, v6 +; GFX9-NEXT: v_subb_co_u32_e32 v12, vcc, 0, v0, vcc +; GFX9-NEXT: v_madmk_f32 v1, v3, 0x4f800000, v1 +; GFX9-NEXT: v_rcp_f32_e32 v1, v1 +; GFX9-NEXT: v_mul_f32_e32 v1, 0x5f7ffffc, v1 +; GFX9-NEXT: v_mul_f32_e32 v3, 0x2f800000, v1 +; GFX9-NEXT: v_trunc_f32_e32 v3, v3 +; GFX9-NEXT: v_madmk_f32 v1, v3, 0xcf800000, v1 +; GFX9-NEXT: v_cvt_u32_f32_e32 v10, v3 +; GFX9-NEXT: v_cvt_u32_f32_e32 v1, v1 +; GFX9-NEXT: v_mul_lo_u32 v5, v11, v10 +; GFX9-NEXT: v_mul_lo_u32 v8, v12, v1 +; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v11, v1, 0 +; GFX9-NEXT: v_add3_u32 v8, v4, v5, v8 +; GFX9-NEXT: v_mul_hi_u32 v9, v1, v3 +; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v1, v8, 0 +; GFX9-NEXT: v_add_co_u32_e32 v13, vcc, v9, v4 +; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v10, v3, 0 +; GFX9-NEXT: v_mad_u64_u32 v[8:9], s[4:5], v10, v8, 0 +; GFX9-NEXT: v_addc_co_u32_e32 v5, vcc, 0, v5, vcc +; GFX9-NEXT: v_add_co_u32_e32 v3, vcc, v13, v3 +; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v5, v4, vcc +; GFX9-NEXT: v_addc_co_u32_e32 v4, vcc, 0, v9, vcc +; GFX9-NEXT: v_add_co_u32_e32 v3, vcc, v3, v8 +; GFX9-NEXT: v_addc_co_u32_e32 v4, vcc, 0, v4, vcc +; GFX9-NEXT: v_add_co_u32_e32 v1, vcc, v1, v3 +; GFX9-NEXT: v_addc_co_u32_e32 v13, vcc, v10, v4, vcc +; GFX9-NEXT: v_mul_lo_u32 v5, v11, v13 +; GFX9-NEXT: v_mul_lo_u32 v8, v12, v1 +; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v11, v1, 0 +; GFX9-NEXT: v_add3_u32 v8, v4, v5, v8 +; GFX9-NEXT: v_mad_u64_u32 v[4:5], s[4:5], v13, v8, 0 +; GFX9-NEXT: v_mad_u64_u32 v[8:9], s[4:5], v1, v8, 0 +; GFX9-NEXT: v_mul_hi_u32 v12, v1, v3 +; GFX9-NEXT: v_mad_u64_u32 v[10:11], s[4:5], v13, v3, 0 +; GFX9-NEXT: v_add_co_u32_e32 v3, vcc, v12, v8 +; GFX9-NEXT: v_addc_co_u32_e32 v8, vcc, 0, v9, vcc +; GFX9-NEXT: v_add_co_u32_e32 v3, vcc, v3, v10 +; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, v8, v11, vcc +; GFX9-NEXT: v_addc_co_u32_e32 v5, vcc, 0, v5, vcc +; GFX9-NEXT: v_add_co_u32_e32 v3, vcc, v3, v4 +; GFX9-NEXT: v_addc_co_u32_e32 v4, vcc, 0, v5, vcc +; GFX9-NEXT: v_add_co_u32_e32 v1, vcc, v1, v3 +; GFX9-NEXT: v_addc_co_u32_e32 v5, vcc, v13, v4, vcc +; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v7, v5, 0 +; GFX9-NEXT: v_mul_hi_u32 v8, v7, v1 +; GFX9-NEXT: v_add_co_u32_e32 v10, vcc, v8, v3 +; GFX9-NEXT: v_addc_co_u32_e32 v11, vcc, 0, v4, vcc +; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v2, v1, 0 +; GFX9-NEXT: v_mad_u64_u32 v[8:9], s[4:5], v2, v5, 0 +; GFX9-NEXT: v_add_co_u32_e32 v1, vcc, v10, v3 +; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v11, v4, vcc +; GFX9-NEXT: v_addc_co_u32_e32 v3, vcc, 0, v9, vcc +; GFX9-NEXT: v_add_co_u32_e32 v1, vcc, v1, v8 +; GFX9-NEXT: v_addc_co_u32_e32 v5, vcc, 0, v3, vcc +; GFX9-NEXT: v_mul_lo_u32 v8, v0, v1 +; GFX9-NEXT: v_mul_lo_u32 v9, v6, v5 +; GFX9-NEXT: v_mad_u64_u32 v[3:4], s[4:5], v6, v1, 0 +; GFX9-NEXT: v_add3_u32 v4, v4, v9, v8 +; GFX9-NEXT: v_sub_u32_e32 v8, v2, v4 +; GFX9-NEXT: v_sub_co_u32_e32 v3, vcc, v7, v3 +; GFX9-NEXT: v_subb_co_u32_e64 v7, s[4:5], v8, v0, vcc +; GFX9-NEXT: v_sub_co_u32_e64 v8, s[4:5], v3, v6 +; GFX9-NEXT: v_subbrev_co_u32_e64 v7, s[4:5], 0, v7, s[4:5] +; GFX9-NEXT: v_cmp_ge_u32_e64 s[4:5], v7, v0 +; GFX9-NEXT: v_cndmask_b32_e64 v9, 0, -1, s[4:5] +; GFX9-NEXT: v_cmp_ge_u32_e64 s[4:5], v8, v6 +; GFX9-NEXT: v_cndmask_b32_e64 v8, 0, -1, s[4:5] +; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], v7, v0 +; GFX9-NEXT: v_cndmask_b32_e64 v7, v9, v8, s[4:5] +; GFX9-NEXT: v_add_co_u32_e64 v8, s[4:5], 2, v1 +; GFX9-NEXT: v_subb_co_u32_e32 v2, vcc, v2, v4, vcc +; GFX9-NEXT: v_addc_co_u32_e64 v9, s[4:5], 0, v5, s[4:5] +; GFX9-NEXT: v_cmp_ge_u32_e32 vcc, v2, v0 +; GFX9-NEXT: v_add_co_u32_e64 v10, s[4:5], 1, v1 +; GFX9-NEXT: v_cndmask_b32_e64 v4, 0, -1, vcc +; GFX9-NEXT: v_cmp_ge_u32_e32 vcc, v3, v6 +; GFX9-NEXT: v_addc_co_u32_e64 v11, s[4:5], 0, v5, s[4:5] +; GFX9-NEXT: v_cndmask_b32_e64 v3, 0, -1, vcc +; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, v2, v0 +; GFX9-NEXT: v_cmp_ne_u32_e64 s[4:5], 0, v7 +; GFX9-NEXT: v_cndmask_b32_e32 v0, v4, v3, vcc +; GFX9-NEXT: v_cndmask_b32_e64 v7, v11, v9, s[4:5] +; GFX9-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0 +; GFX9-NEXT: v_cndmask_b32_e64 v0, v10, v8, s[4:5] +; GFX9-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc +; GFX9-NEXT: v_cndmask_b32_e32 v4, v1, v0, vcc +; GFX9-NEXT: ; implicit-def: $vgpr2_vgpr3 +; GFX9-NEXT: ; implicit-def: $vgpr0_vgpr1 +; GFX9-NEXT: .LBB10_2: ; %Flow +; GFX9-NEXT: s_andn2_saveexec_b64 s[4:5], s[6:7] +; GFX9-NEXT: s_cbranch_execz .LBB10_4 +; GFX9-NEXT: ; %bb.3: ; GFX9-NEXT: v_cvt_f32_u32_e32 v0, v3 ; GFX9-NEXT: v_sub_u32_e32 v2, 0, v3 +; GFX9-NEXT: v_mov_b32_e32 v5, 0 ; GFX9-NEXT: v_rcp_iflag_f32_e32 v0, v0 ; GFX9-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v0 ; GFX9-NEXT: v_cvt_u32_f32_e32 v0, v0 @@ -1033,14 +1141,17 @@ define i64 @sdiv64_known32(i64 %a, i64 %b) { ; GFX9-NEXT: v_mul_lo_u32 v2, v0, v3 ; GFX9-NEXT: v_add_u32_e32 v4, 1, v0 ; GFX9-NEXT: v_sub_u32_e32 v1, v1, v2 -; GFX9-NEXT: v_cmp_ge_u32_e32 vcc, v1, v3 ; GFX9-NEXT: v_sub_u32_e32 v2, v1, v3 -; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc +; GFX9-NEXT: v_cmp_ge_u32_e32 vcc, v1, v3 ; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc +; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc ; GFX9-NEXT: v_add_u32_e32 v2, 1, v0 ; GFX9-NEXT: v_cmp_ge_u32_e32 vcc, v1, v3 -; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc -; GFX9-NEXT: v_mov_b32_e32 v1, 0 +; GFX9-NEXT: v_cndmask_b32_e32 v4, v0, v2, vcc +; GFX9-NEXT: .LBB10_4: +; GFX9-NEXT: s_or_b64 exec, exec, s[4:5] +; GFX9-NEXT: v_mov_b32_e32 v0, v4 +; GFX9-NEXT: v_mov_b32_e32 v1, v5 ; GFX9-NEXT: s_setpc_b64 s[30:31] %a.ext = ashr i64 %a, 32 %b.ext = ashr i64 %b, 32 diff --git a/llvm/test/CodeGen/AMDGPU/udiv64.ll b/llvm/test/CodeGen/AMDGPU/udiv64.ll index a77e3c226ad2..db7d816386a7 100644 --- a/llvm/test/CodeGen/AMDGPU/udiv64.ll +++ b/llvm/test/CodeGen/AMDGPU/udiv64.ll @@ -716,199 +716,66 @@ define amdgpu_kernel void @s_test_udiv23_i64(ptr addrspace(1) %out, i64 %x, i64 define amdgpu_kernel void @s_test_udiv24_i48(ptr addrspace(1) %out, i48 %x, i48 %y) { ; GCN-LABEL: s_test_udiv24_i48: ; GCN: ; %bb.0: -; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd -; GCN-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x9 -; GCN-NEXT: v_mov_b32_e32 v2, 0x4f800000 -; GCN-NEXT: s_mov_b32 s3, 0xf000 -; GCN-NEXT: s_mov_b32 s2, -1 +; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9 +; GCN-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd +; GCN-NEXT: s_mov_b32 s7, 0xf000 +; GCN-NEXT: s_mov_b32 s6, -1 +; GCN-NEXT: v_mov_b32_e32 v3, 0 ; GCN-NEXT: s_waitcnt lgkmcnt(0) -; GCN-NEXT: s_and_b32 s0, s0, 0xff000000 -; GCN-NEXT: s_and_b32 s1, s1, 0xffff -; GCN-NEXT: v_mov_b32_e32 v0, s0 -; GCN-NEXT: v_alignbit_b32 v0, s1, v0, 24 -; GCN-NEXT: v_cvt_f32_u32_e32 v1, v0 -; GCN-NEXT: s_and_b32 s7, s7, 0xffff -; GCN-NEXT: s_and_b32 s6, s6, 0xff000000 -; GCN-NEXT: s_lshr_b64 s[0:1], s[0:1], 24 -; GCN-NEXT: v_mac_f32_e32 v1, 0, v2 -; GCN-NEXT: v_rcp_f32_e32 v1, v1 -; GCN-NEXT: s_sub_u32 s8, 0, s0 -; GCN-NEXT: s_subb_u32 s9, 0, s1 -; GCN-NEXT: s_mov_b32 s0, s4 -; GCN-NEXT: v_mul_f32_e32 v1, 0x5f7ffffc, v1 -; GCN-NEXT: v_mul_f32_e32 v2, 0x2f800000, v1 +; GCN-NEXT: s_and_b32 s2, s2, 0xff000000 +; GCN-NEXT: s_and_b32 s4, s4, 0xff000000 +; GCN-NEXT: s_and_b32 s5, s5, 0xffff +; GCN-NEXT: v_mov_b32_e32 v0, s4 +; GCN-NEXT: v_alignbit_b32 v0, s5, v0, 24 +; GCN-NEXT: v_cvt_f32_u32_e32 v0, v0 +; GCN-NEXT: s_and_b32 s3, s3, 0xffff +; GCN-NEXT: v_mov_b32_e32 v1, s2 +; GCN-NEXT: v_alignbit_b32 v1, s3, v1, 24 +; GCN-NEXT: v_cvt_f32_u32_e32 v1, v1 +; GCN-NEXT: v_rcp_iflag_f32_e32 v2, v0 +; GCN-NEXT: s_mov_b32 s4, s0 +; GCN-NEXT: s_mov_b32 s5, s1 +; GCN-NEXT: v_mul_f32_e32 v2, v1, v2 ; GCN-NEXT: v_trunc_f32_e32 v2, v2 -; GCN-NEXT: v_madmk_f32 v1, v2, 0xcf800000, v1 +; GCN-NEXT: v_mad_f32 v1, -v2, v0, v1 ; GCN-NEXT: v_cvt_u32_f32_e32 v2, v2 -; GCN-NEXT: v_cvt_u32_f32_e32 v1, v1 -; GCN-NEXT: s_mov_b32 s1, s5 -; GCN-NEXT: v_mul_lo_u32 v3, s8, v2 -; GCN-NEXT: v_mul_hi_u32 v4, s8, v1 -; GCN-NEXT: v_mul_lo_u32 v5, s9, v1 -; GCN-NEXT: v_mul_lo_u32 v6, s8, v1 -; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v4 -; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v5 -; GCN-NEXT: v_mul_lo_u32 v4, v1, v3 -; GCN-NEXT: v_mul_hi_u32 v5, v1, v6 -; GCN-NEXT: v_mul_hi_u32 v7, v1, v3 -; GCN-NEXT: v_mul_hi_u32 v8, v2, v3 -; GCN-NEXT: v_mul_lo_u32 v3, v2, v3 -; GCN-NEXT: v_add_i32_e32 v4, vcc, v5, v4 -; GCN-NEXT: v_addc_u32_e32 v5, vcc, 0, v7, vcc -; GCN-NEXT: v_mul_lo_u32 v7, v2, v6 -; GCN-NEXT: v_mul_hi_u32 v6, v2, v6 -; GCN-NEXT: v_add_i32_e32 v4, vcc, v4, v7 -; GCN-NEXT: v_addc_u32_e32 v4, vcc, v5, v6, vcc -; GCN-NEXT: v_addc_u32_e32 v5, vcc, 0, v8, vcc -; GCN-NEXT: v_add_i32_e32 v3, vcc, v4, v3 -; GCN-NEXT: v_addc_u32_e32 v4, vcc, 0, v5, vcc -; GCN-NEXT: v_add_i32_e32 v1, vcc, v1, v3 -; GCN-NEXT: v_addc_u32_e32 v2, vcc, v2, v4, vcc -; GCN-NEXT: v_mul_lo_u32 v3, s8, v2 -; GCN-NEXT: v_mul_hi_u32 v4, s8, v1 -; GCN-NEXT: v_mul_lo_u32 v5, s9, v1 -; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v4 -; GCN-NEXT: v_mul_lo_u32 v4, s8, v1 -; GCN-NEXT: v_add_i32_e32 v3, vcc, v3, v5 -; GCN-NEXT: v_mul_lo_u32 v7, v1, v3 -; GCN-NEXT: v_mul_hi_u32 v8, v1, v4 -; GCN-NEXT: v_mul_hi_u32 v9, v1, v3 -; GCN-NEXT: v_mul_hi_u32 v6, v2, v4 -; GCN-NEXT: v_mul_lo_u32 v4, v2, v4 -; GCN-NEXT: v_mul_hi_u32 v5, v2, v3 -; GCN-NEXT: v_add_i32_e32 v7, vcc, v8, v7 -; GCN-NEXT: v_addc_u32_e32 v8, vcc, 0, v9, vcc -; GCN-NEXT: v_mul_lo_u32 v3, v2, v3 -; GCN-NEXT: v_add_i32_e32 v4, vcc, v7, v4 -; GCN-NEXT: v_addc_u32_e32 v4, vcc, v8, v6, vcc -; GCN-NEXT: v_addc_u32_e32 v5, vcc, 0, v5, vcc -; GCN-NEXT: v_add_i32_e32 v3, vcc, v4, v3 -; GCN-NEXT: v_addc_u32_e32 v4, vcc, 0, v5, vcc -; GCN-NEXT: v_add_i32_e32 v1, vcc, v1, v3 -; GCN-NEXT: v_mov_b32_e32 v3, s6 -; GCN-NEXT: v_addc_u32_e32 v2, vcc, v2, v4, vcc -; GCN-NEXT: v_alignbit_b32 v3, s7, v3, 24 -; GCN-NEXT: v_mul_lo_u32 v4, v3, v2 -; GCN-NEXT: v_mul_hi_u32 v1, v3, v1 -; GCN-NEXT: v_mul_hi_u32 v2, v3, v2 -; GCN-NEXT: v_mov_b32_e32 v5, 0 -; GCN-NEXT: v_add_i32_e32 v1, vcc, v1, v4 -; GCN-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc -; GCN-NEXT: v_add_i32_e32 v1, vcc, 0, v1 -; GCN-NEXT: v_addc_u32_e32 v1, vcc, 0, v2, vcc -; GCN-NEXT: v_addc_u32_e32 v2, vcc, 0, v5, vcc -; GCN-NEXT: v_add_i32_e32 v1, vcc, 0, v1 -; GCN-NEXT: v_addc_u32_e32 v2, vcc, 0, v2, vcc -; GCN-NEXT: v_mul_lo_u32 v6, v0, v2 -; GCN-NEXT: v_mul_hi_u32 v7, v0, v1 -; GCN-NEXT: v_add_i32_e32 v4, vcc, 1, v1 -; GCN-NEXT: v_mul_lo_u32 v10, v0, v1 -; GCN-NEXT: v_addc_u32_e32 v5, vcc, 0, v2, vcc -; GCN-NEXT: v_add_i32_e32 v8, vcc, 2, v1 -; GCN-NEXT: v_addc_u32_e32 v9, vcc, 0, v2, vcc -; GCN-NEXT: v_add_i32_e32 v6, vcc, v6, v7 -; GCN-NEXT: v_sub_i32_e32 v3, vcc, v3, v10 -; GCN-NEXT: v_subb_u32_e32 v6, vcc, 0, v6, vcc -; GCN-NEXT: v_sub_i32_e32 v7, vcc, v3, v0 -; GCN-NEXT: v_subbrev_u32_e32 v10, vcc, 0, v6, vcc -; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v7, v0 -; GCN-NEXT: v_cndmask_b32_e64 v7, 0, -1, vcc -; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v10 -; GCN-NEXT: v_cndmask_b32_e32 v7, -1, v7, vcc -; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 0, v7 -; GCN-NEXT: v_cndmask_b32_e32 v5, v5, v9, vcc -; GCN-NEXT: v_cndmask_b32_e32 v4, v4, v8, vcc -; GCN-NEXT: v_cmp_ge_u32_e32 vcc, v3, v0 -; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc -; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v6 -; GCN-NEXT: v_cndmask_b32_e32 v0, -1, v0, vcc -; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0 -; GCN-NEXT: v_cndmask_b32_e32 v0, v1, v4, vcc -; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v5, vcc -; GCN-NEXT: buffer_store_short v1, off, s[0:3], 0 offset:4 -; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 0 +; GCN-NEXT: v_cmp_ge_f32_e64 vcc, |v1|, v0 +; GCN-NEXT: v_addc_u32_e32 v0, vcc, 0, v2, vcc +; GCN-NEXT: v_and_b32_e32 v0, 0xffffff, v0 +; GCN-NEXT: buffer_store_short v3, off, s[4:7], 0 offset:4 +; GCN-NEXT: buffer_store_dword v0, off, s[4:7], 0 ; GCN-NEXT: s_endpgm ; ; GCN-IR-LABEL: s_test_udiv24_i48: -; GCN-IR: ; %bb.0: ; %_udiv-special-cases -; GCN-IR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xb -; GCN-IR-NEXT: s_mov_b32 s11, 0 +; GCN-IR: ; %bb.0: +; GCN-IR-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9 +; GCN-IR-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd +; GCN-IR-NEXT: s_mov_b32 s7, 0xf000 +; GCN-IR-NEXT: s_mov_b32 s6, -1 +; GCN-IR-NEXT: v_mov_b32_e32 v3, 0 ; GCN-IR-NEXT: s_waitcnt lgkmcnt(0) -; GCN-IR-NEXT: s_and_b32 s1, s1, 0xffff -; GCN-IR-NEXT: s_and_b32 s0, s0, 0xff000000 -; GCN-IR-NEXT: s_and_b32 s3, s3, 0xffff ; GCN-IR-NEXT: s_and_b32 s2, s2, 0xff000000 -; GCN-IR-NEXT: s_lshr_b64 s[8:9], s[0:1], 24 -; GCN-IR-NEXT: s_lshr_b64 s[0:1], s[2:3], 24 -; GCN-IR-NEXT: s_and_b32 s9, s9, 0xffff -; GCN-IR-NEXT: s_and_b32 s1, s1, 0xffff -; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[2:3], s[0:1], 0 -; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[6:7], s[8:9], 0 -; GCN-IR-NEXT: s_flbit_i32_b64 s10, s[0:1] -; GCN-IR-NEXT: s_or_b64 s[6:7], s[2:3], s[6:7] -; GCN-IR-NEXT: s_flbit_i32_b64 s16, s[8:9] -; GCN-IR-NEXT: s_sub_u32 s12, s10, s16 -; GCN-IR-NEXT: s_subb_u32 s13, 0, 0 -; GCN-IR-NEXT: v_cmp_gt_u64_e64 s[14:15], s[12:13], 63 -; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[18:19], s[12:13], 63 -; GCN-IR-NEXT: s_or_b64 s[14:15], s[6:7], s[14:15] -; GCN-IR-NEXT: s_and_b64 s[6:7], s[14:15], exec -; GCN-IR-NEXT: s_cselect_b32 s7, 0, s9 -; GCN-IR-NEXT: s_cselect_b32 s6, 0, s8 -; GCN-IR-NEXT: s_or_b64 s[14:15], s[14:15], s[18:19] -; GCN-IR-NEXT: s_mov_b64 s[2:3], 0 -; GCN-IR-NEXT: s_andn2_b64 vcc, exec, s[14:15] -; GCN-IR-NEXT: s_cbranch_vccz .LBB7_5 -; GCN-IR-NEXT: ; %bb.1: ; %udiv-bb1 -; GCN-IR-NEXT: s_add_u32 s14, s12, 1 -; GCN-IR-NEXT: s_addc_u32 s15, s13, 0 -; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[6:7], s[14:15], 0 -; GCN-IR-NEXT: s_sub_i32 s12, 63, s12 -; GCN-IR-NEXT: s_andn2_b64 vcc, exec, s[6:7] -; GCN-IR-NEXT: s_lshl_b64 s[6:7], s[8:9], s12 -; GCN-IR-NEXT: s_cbranch_vccz .LBB7_4 -; GCN-IR-NEXT: ; %bb.2: ; %udiv-preheader -; GCN-IR-NEXT: s_lshr_b64 s[12:13], s[8:9], s14 -; GCN-IR-NEXT: s_add_u32 s14, s0, -1 -; GCN-IR-NEXT: s_addc_u32 s15, s1, -1 -; GCN-IR-NEXT: s_not_b64 s[2:3], s[10:11] -; GCN-IR-NEXT: s_add_u32 s8, s2, s16 -; GCN-IR-NEXT: s_addc_u32 s9, s3, 0 -; GCN-IR-NEXT: s_mov_b64 s[10:11], 0 -; GCN-IR-NEXT: s_mov_b32 s3, 0 -; GCN-IR-NEXT: .LBB7_3: ; %udiv-do-while -; GCN-IR-NEXT: ; =>This Inner Loop Header: Depth=1 -; GCN-IR-NEXT: s_lshl_b64 s[12:13], s[12:13], 1 -; GCN-IR-NEXT: s_lshr_b32 s2, s7, 31 -; GCN-IR-NEXT: s_lshl_b64 s[6:7], s[6:7], 1 -; GCN-IR-NEXT: s_or_b64 s[12:13], s[12:13], s[2:3] -; GCN-IR-NEXT: s_or_b64 s[6:7], s[10:11], s[6:7] -; GCN-IR-NEXT: s_sub_u32 s2, s14, s12 -; GCN-IR-NEXT: s_subb_u32 s2, s15, s13 -; GCN-IR-NEXT: s_ashr_i32 s10, s2, 31 -; GCN-IR-NEXT: s_mov_b32 s11, s10 -; GCN-IR-NEXT: s_and_b32 s2, s10, 1 -; GCN-IR-NEXT: s_and_b64 s[10:11], s[10:11], s[0:1] -; GCN-IR-NEXT: s_sub_u32 s12, s12, s10 -; GCN-IR-NEXT: s_subb_u32 s13, s13, s11 -; GCN-IR-NEXT: s_add_u32 s8, s8, 1 -; GCN-IR-NEXT: s_addc_u32 s9, s9, 0 -; GCN-IR-NEXT: v_cmp_eq_u64_e64 s[16:17], s[8:9], 0 -; GCN-IR-NEXT: s_mov_b64 s[10:11], s[2:3] -; GCN-IR-NEXT: s_and_b64 vcc, exec, s[16:17] -; GCN-IR-NEXT: s_cbranch_vccz .LBB7_3 -; GCN-IR-NEXT: .LBB7_4: ; %Flow4 -; GCN-IR-NEXT: s_lshl_b64 s[0:1], s[6:7], 1 -; GCN-IR-NEXT: s_or_b64 s[6:7], s[2:3], s[0:1] -; GCN-IR-NEXT: .LBB7_5: ; %udiv-end -; GCN-IR-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9 -; GCN-IR-NEXT: s_mov_b32 s3, 0xf000 -; GCN-IR-NEXT: s_mov_b32 s2, -1 -; GCN-IR-NEXT: v_mov_b32_e32 v0, s7 -; GCN-IR-NEXT: v_mov_b32_e32 v1, s6 -; GCN-IR-NEXT: s_waitcnt lgkmcnt(0) -; GCN-IR-NEXT: buffer_store_short v0, off, s[0:3], 0 offset:4 -; GCN-IR-NEXT: buffer_store_dword v1, off, s[0:3], 0 +; GCN-IR-NEXT: s_and_b32 s4, s4, 0xff000000 +; GCN-IR-NEXT: s_and_b32 s5, s5, 0xffff +; GCN-IR-NEXT: v_mov_b32_e32 v0, s4 +; GCN-IR-NEXT: v_alignbit_b32 v0, s5, v0, 24 +; GCN-IR-NEXT: v_cvt_f32_u32_e32 v0, v0 +; GCN-IR-NEXT: s_and_b32 s3, s3, 0xffff +; GCN-IR-NEXT: v_mov_b32_e32 v1, s2 +; GCN-IR-NEXT: v_alignbit_b32 v1, s3, v1, 24 +; GCN-IR-NEXT: v_cvt_f32_u32_e32 v1, v1 +; GCN-IR-NEXT: v_rcp_iflag_f32_e32 v2, v0 +; GCN-IR-NEXT: s_mov_b32 s4, s0 +; GCN-IR-NEXT: s_mov_b32 s5, s1 +; GCN-IR-NEXT: v_mul_f32_e32 v2, v1, v2 +; GCN-IR-NEXT: v_trunc_f32_e32 v2, v2 +; GCN-IR-NEXT: v_mad_f32 v1, -v2, v0, v1 +; GCN-IR-NEXT: v_cvt_u32_f32_e32 v2, v2 +; GCN-IR-NEXT: v_cmp_ge_f32_e64 vcc, |v1|, v0 +; GCN-IR-NEXT: v_addc_u32_e32 v0, vcc, 0, v2, vcc +; GCN-IR-NEXT: v_and_b32_e32 v0, 0xffffff, v0 +; GCN-IR-NEXT: buffer_store_short v3, off, s[4:7], 0 offset:4 +; GCN-IR-NEXT: buffer_store_dword v0, off, s[4:7], 0 ; GCN-IR-NEXT: s_endpgm %1 = lshr i48 %x, 24 %2 = lshr i48 %y, 24 diff --git a/llvm/test/CodeGen/AMDGPU/urem64.ll b/llvm/test/CodeGen/AMDGPU/urem64.ll index b4f977db8043..a794d139063d 100644 --- a/llvm/test/CodeGen/AMDGPU/urem64.ll +++ b/llvm/test/CodeGen/AMDGPU/urem64.ll @@ -665,54 +665,47 @@ define amdgpu_kernel void @s_test_urem23_64_v2i64(ptr addrspace(1) %out, <2 x i6 ; GCN-LABEL: s_test_urem23_64_v2i64: ; GCN: ; %bb.0: ; GCN-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0xd +; GCN-NEXT: v_mov_b32_e32 v1, 0 ; GCN-NEXT: s_mov_b32 s3, 0xf000 +; GCN-NEXT: s_mov_b32 s2, -1 ; GCN-NEXT: s_waitcnt lgkmcnt(0) -; GCN-NEXT: s_lshr_b32 s0, s13, 1 -; GCN-NEXT: v_cvt_f32_u32_e32 v0, s0 -; GCN-NEXT: s_sub_i32 s1, 0, s0 -; GCN-NEXT: s_lshr_b32 s6, s15, 9 -; GCN-NEXT: v_cvt_f32_u32_e32 v2, s6 -; GCN-NEXT: v_rcp_iflag_f32_e32 v0, v0 +; GCN-NEXT: s_lshr_b32 s6, s13, 1 +; GCN-NEXT: v_cvt_f32_u32_e32 v0, s6 +; GCN-NEXT: s_lshr_b32 s0, s15, 9 +; GCN-NEXT: v_cvt_f32_u32_e32 v2, s0 ; GCN-NEXT: s_lshr_b32 s7, s11, 9 -; GCN-NEXT: v_rcp_iflag_f32_e32 v2, v2 +; GCN-NEXT: v_rcp_iflag_f32_e32 v0, v0 +; GCN-NEXT: v_cvt_f32_u32_e32 v3, s7 +; GCN-NEXT: v_rcp_iflag_f32_e32 v4, v2 +; GCN-NEXT: s_sub_i32 s1, 0, s6 ; GCN-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v0 ; GCN-NEXT: v_cvt_u32_f32_e32 v0, v0 -; GCN-NEXT: v_mul_lo_u32 v1, s1, v0 -; GCN-NEXT: s_lshr_b32 s1, s9, 1 -; GCN-NEXT: v_mul_hi_u32 v1, v0, v1 -; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v1 -; GCN-NEXT: v_mul_hi_u32 v0, s1, v0 -; GCN-NEXT: v_mul_f32_e32 v1, 0x4f7ffffe, v2 -; GCN-NEXT: v_cvt_u32_f32_e32 v1, v1 -; GCN-NEXT: v_readfirstlane_b32 s2, v0 -; GCN-NEXT: s_mul_i32 s2, s2, s0 -; GCN-NEXT: s_sub_i32 s1, s1, s2 -; GCN-NEXT: s_sub_i32 s2, s1, s0 -; GCN-NEXT: s_cmp_ge_u32 s1, s0 -; GCN-NEXT: s_cselect_b32 s1, s2, s1 -; GCN-NEXT: s_sub_i32 s2, s1, s0 -; GCN-NEXT: s_cmp_ge_u32 s1, s0 -; GCN-NEXT: s_cselect_b32 s8, s2, s1 -; GCN-NEXT: s_sub_i32 s0, 0, s6 -; GCN-NEXT: v_mul_lo_u32 v0, s0, v1 +; GCN-NEXT: v_mul_f32_e32 v4, v3, v4 +; GCN-NEXT: v_trunc_f32_e32 v4, v4 +; GCN-NEXT: v_mad_f32 v3, -v4, v2, v3 +; GCN-NEXT: v_mul_lo_u32 v5, s1, v0 +; GCN-NEXT: v_cvt_u32_f32_e32 v4, v4 +; GCN-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, v2 +; GCN-NEXT: s_lshr_b32 s8, s9, 1 +; GCN-NEXT: v_mul_hi_u32 v5, v0, v5 +; GCN-NEXT: v_addc_u32_e32 v2, vcc, 0, v4, vcc +; GCN-NEXT: v_mul_lo_u32 v2, v2, s0 +; GCN-NEXT: v_add_i32_e32 v0, vcc, v0, v5 +; GCN-NEXT: v_mul_hi_u32 v0, s8, v0 ; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9 -; GCN-NEXT: s_mov_b32 s2, -1 -; GCN-NEXT: v_mul_hi_u32 v0, v1, v0 -; GCN-NEXT: v_add_i32_e32 v0, vcc, v1, v0 -; GCN-NEXT: v_mul_hi_u32 v2, s7, v0 -; GCN-NEXT: v_mov_b32_e32 v1, 0 -; GCN-NEXT: v_mov_b32_e32 v0, s8 -; GCN-NEXT: v_mov_b32_e32 v3, v1 -; GCN-NEXT: v_readfirstlane_b32 s4, v2 +; GCN-NEXT: v_sub_i32_e32 v2, vcc, s7, v2 +; GCN-NEXT: v_readfirstlane_b32 s4, v0 ; GCN-NEXT: s_mul_i32 s4, s4, s6 -; GCN-NEXT: s_sub_i32 s4, s7, s4 +; GCN-NEXT: s_sub_i32 s4, s8, s4 ; GCN-NEXT: s_sub_i32 s5, s4, s6 ; GCN-NEXT: s_cmp_ge_u32 s4, s6 ; GCN-NEXT: s_cselect_b32 s4, s5, s4 ; GCN-NEXT: s_sub_i32 s5, s4, s6 ; GCN-NEXT: s_cmp_ge_u32 s4, s6 ; GCN-NEXT: s_cselect_b32 s4, s5, s4 -; GCN-NEXT: v_mov_b32_e32 v2, s4 +; GCN-NEXT: v_and_b32_e32 v2, 0x7fffff, v2 +; GCN-NEXT: v_mov_b32_e32 v0, s4 +; GCN-NEXT: v_mov_b32_e32 v3, v1 ; GCN-NEXT: s_waitcnt lgkmcnt(0) ; GCN-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 0 ; GCN-NEXT: s_endpgm @@ -720,54 +713,47 @@ define amdgpu_kernel void @s_test_urem23_64_v2i64(ptr addrspace(1) %out, <2 x i6 ; GCN-IR-LABEL: s_test_urem23_64_v2i64: ; GCN-IR: ; %bb.0: ; GCN-IR-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0xd +; GCN-IR-NEXT: v_mov_b32_e32 v1, 0 ; GCN-IR-NEXT: s_mov_b32 s3, 0xf000 +; GCN-IR-NEXT: s_mov_b32 s2, -1 ; GCN-IR-NEXT: s_waitcnt lgkmcnt(0) -; GCN-IR-NEXT: s_lshr_b32 s0, s13, 1 -; GCN-IR-NEXT: v_cvt_f32_u32_e32 v0, s0 -; GCN-IR-NEXT: s_sub_i32 s1, 0, s0 -; GCN-IR-NEXT: s_lshr_b32 s6, s15, 9 -; GCN-IR-NEXT: v_cvt_f32_u32_e32 v2, s6 -; GCN-IR-NEXT: v_rcp_iflag_f32_e32 v0, v0 +; GCN-IR-NEXT: s_lshr_b32 s6, s13, 1 +; GCN-IR-NEXT: v_cvt_f32_u32_e32 v0, s6 +; GCN-IR-NEXT: s_lshr_b32 s0, s15, 9 +; GCN-IR-NEXT: v_cvt_f32_u32_e32 v2, s0 ; GCN-IR-NEXT: s_lshr_b32 s7, s11, 9 -; GCN-IR-NEXT: v_rcp_iflag_f32_e32 v2, v2 +; GCN-IR-NEXT: v_rcp_iflag_f32_e32 v0, v0 +; GCN-IR-NEXT: v_cvt_f32_u32_e32 v3, s7 +; GCN-IR-NEXT: v_rcp_iflag_f32_e32 v4, v2 +; GCN-IR-NEXT: s_sub_i32 s1, 0, s6 ; GCN-IR-NEXT: v_mul_f32_e32 v0, 0x4f7ffffe, v0 ; GCN-IR-NEXT: v_cvt_u32_f32_e32 v0, v0 -; GCN-IR-NEXT: v_mul_lo_u32 v1, s1, v0 -; GCN-IR-NEXT: s_lshr_b32 s1, s9, 1 -; GCN-IR-NEXT: v_mul_hi_u32 v1, v0, v1 -; GCN-IR-NEXT: v_add_i32_e32 v0, vcc, v0, v1 -; GCN-IR-NEXT: v_mul_hi_u32 v0, s1, v0 -; GCN-IR-NEXT: v_mul_f32_e32 v1, 0x4f7ffffe, v2 -; GCN-IR-NEXT: v_cvt_u32_f32_e32 v1, v1 -; GCN-IR-NEXT: v_readfirstlane_b32 s2, v0 -; GCN-IR-NEXT: s_mul_i32 s2, s2, s0 -; GCN-IR-NEXT: s_sub_i32 s1, s1, s2 -; GCN-IR-NEXT: s_sub_i32 s2, s1, s0 -; GCN-IR-NEXT: s_cmp_ge_u32 s1, s0 -; GCN-IR-NEXT: s_cselect_b32 s1, s2, s1 -; GCN-IR-NEXT: s_sub_i32 s2, s1, s0 -; GCN-IR-NEXT: s_cmp_ge_u32 s1, s0 -; GCN-IR-NEXT: s_cselect_b32 s8, s2, s1 -; GCN-IR-NEXT: s_sub_i32 s0, 0, s6 -; GCN-IR-NEXT: v_mul_lo_u32 v0, s0, v1 +; GCN-IR-NEXT: v_mul_f32_e32 v4, v3, v4 +; GCN-IR-NEXT: v_trunc_f32_e32 v4, v4 +; GCN-IR-NEXT: v_mad_f32 v3, -v4, v2, v3 +; GCN-IR-NEXT: v_mul_lo_u32 v5, s1, v0 +; GCN-IR-NEXT: v_cvt_u32_f32_e32 v4, v4 +; GCN-IR-NEXT: v_cmp_ge_f32_e64 vcc, |v3|, v2 +; GCN-IR-NEXT: s_lshr_b32 s8, s9, 1 +; GCN-IR-NEXT: v_mul_hi_u32 v5, v0, v5 +; GCN-IR-NEXT: v_addc_u32_e32 v2, vcc, 0, v4, vcc +; GCN-IR-NEXT: v_mul_lo_u32 v2, v2, s0 +; GCN-IR-NEXT: v_add_i32_e32 v0, vcc, v0, v5 +; GCN-IR-NEXT: v_mul_hi_u32 v0, s8, v0 ; GCN-IR-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9 -; GCN-IR-NEXT: s_mov_b32 s2, -1 -; GCN-IR-NEXT: v_mul_hi_u32 v0, v1, v0 -; GCN-IR-NEXT: v_add_i32_e32 v0, vcc, v1, v0 -; GCN-IR-NEXT: v_mul_hi_u32 v2, s7, v0 -; GCN-IR-NEXT: v_mov_b32_e32 v1, 0 -; GCN-IR-NEXT: v_mov_b32_e32 v0, s8 -; GCN-IR-NEXT: v_mov_b32_e32 v3, v1 -; GCN-IR-NEXT: v_readfirstlane_b32 s4, v2 +; GCN-IR-NEXT: v_sub_i32_e32 v2, vcc, s7, v2 +; GCN-IR-NEXT: v_readfirstlane_b32 s4, v0 ; GCN-IR-NEXT: s_mul_i32 s4, s4, s6 -; GCN-IR-NEXT: s_sub_i32 s4, s7, s4 +; GCN-IR-NEXT: s_sub_i32 s4, s8, s4 ; GCN-IR-NEXT: s_sub_i32 s5, s4, s6 ; GCN-IR-NEXT: s_cmp_ge_u32 s4, s6 ; GCN-IR-NEXT: s_cselect_b32 s4, s5, s4 ; GCN-IR-NEXT: s_sub_i32 s5, s4, s6 ; GCN-IR-NEXT: s_cmp_ge_u32 s4, s6 ; GCN-IR-NEXT: s_cselect_b32 s4, s5, s4 -; GCN-IR-NEXT: v_mov_b32_e32 v2, s4 +; GCN-IR-NEXT: v_and_b32_e32 v2, 0x7fffff, v2 +; GCN-IR-NEXT: v_mov_b32_e32 v0, s4 +; GCN-IR-NEXT: v_mov_b32_e32 v3, v1 ; GCN-IR-NEXT: s_waitcnt lgkmcnt(0) ; GCN-IR-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 0 ; GCN-IR-NEXT: s_endpgm -- cgit v1.2.3 From 71418379574d2df5e435f67c4b8d7591bd2038e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Clement=20=28=E3=83=90=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=B3=20=E3=82=AF=E3=83=AC=E3=83=A1?= =?UTF-8?q?=E3=83=B3=29?= Date: Thu, 12 Dec 2024 12:47:34 -0800 Subject: [flang][cuda] Implicitly add DEVICE attribute in device/global functions (#119743) Variables in global and device function/subroutine that have no CUDA Fortran data attribute are implicitly DEVICE. --- flang/lib/Semantics/resolve-names.cpp | 20 ++++++++++++++++++++ flang/test/Semantics/modfile55.cuf | 1 + 2 files changed, 21 insertions(+) diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index b576f59e8c7e..aef2898919f3 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -8953,6 +8953,18 @@ void ResolveNamesVisitor::FinishSpecificationPart( misparsedStmtFuncFound_ = false; funcResultStack().CompleteFunctionResultType(); CheckImports(); + bool inDeviceSubprogram = false; + if (auto *subp{currScope().symbol() + ? currScope().symbol()->detailsIf() + : nullptr}) { + if (auto attrs{subp->cudaSubprogramAttrs()}) { + if (*attrs != common::CUDASubprogramAttrs::Device || + *attrs != common::CUDASubprogramAttrs::Global || + *attrs != common::CUDASubprogramAttrs::Grid_Global) { + inDeviceSubprogram = true; + } + } + } for (auto &pair : currScope()) { auto &symbol{*pair.second}; if (inInterfaceBlock()) { @@ -8961,6 +8973,14 @@ void ResolveNamesVisitor::FinishSpecificationPart( if (NeedsExplicitType(symbol)) { ApplyImplicitRules(symbol); } + if (inDeviceSubprogram && IsDummy(symbol) && + symbol.has()) { + auto *dummy{symbol.detailsIf()}; + if (!dummy->cudaDataAttr()) { + // Implicitly set device attribute if none is set in device context. + dummy->set_cudaDataAttr(common::CUDADataAttr::Device); + } + } if (IsDummy(symbol) && isImplicitNoneType() && symbol.test(Symbol::Flag::Implicit) && !context().HasError(symbol)) { Say(symbol.name(), diff --git a/flang/test/Semantics/modfile55.cuf b/flang/test/Semantics/modfile55.cuf index cf01bdd5f58f..6c0d152a382a 100644 --- a/flang/test/Semantics/modfile55.cuf +++ b/flang/test/Semantics/modfile55.cuf @@ -29,6 +29,7 @@ end !contains !attributes(global) subroutine globsub(x,y,z) !real(4),value::x +!attributes(device) x !real(4)::y !attributes(device) y !real(4)::z -- cgit v1.2.3 From 186fac33d08b34be494caa58fe63972f69c6d6ab Mon Sep 17 00:00:00 2001 From: jimingham Date: Thu, 12 Dec 2024 12:48:41 -0800 Subject: Convert the StackFrameList mutex to a shared mutex. (#117252) In fact, there's only one public API in StackFrameList that changes the list explicitly. The rest only change the list if you happen to ask for more frames than lldb has currently fetched and that always adds frames "behind the user's back". So we were much more prone to deadlocking than we needed to be. This patch uses a shared_mutex instead, and when we have to add more frames (in GetFramesUpTo) we switches to exclusive long enough to add the frames, then goes back to shared. Most of the work here was actually getting the stack frame list locking to not require a recursive mutex (shared mutexes aren't recursive). I also added a test that has 5 threads progressively asking for more frames simultaneously to make sure we get back valid frames and don't deadlock. --- lldb/include/lldb/Target/StackFrameList.h | 66 ++++-- lldb/source/Target/StackFrameList.cpp | 237 +++++++++++---------- lldb/source/Target/Thread.cpp | 2 +- .../API/api/multithreaded/TestMultithreaded.py | 17 +- lldb/test/API/api/multithreaded/deep_stack.cpp | 17 ++ .../test_concurrent_unwind.cpp.template | 91 ++++++++ 6 files changed, 298 insertions(+), 132 deletions(-) create mode 100644 lldb/test/API/api/multithreaded/deep_stack.cpp create mode 100644 lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template diff --git a/lldb/include/lldb/Target/StackFrameList.h b/lldb/include/lldb/Target/StackFrameList.h index 7d0e7a5b9a71..8a66296346f2 100644 --- a/lldb/include/lldb/Target/StackFrameList.h +++ b/lldb/include/lldb/Target/StackFrameList.h @@ -11,6 +11,7 @@ #include #include +#include #include #include "lldb/Target/StackFrame.h" @@ -94,24 +95,36 @@ public: bool show_unique = false, bool show_hidden = false, const char *frame_marker = nullptr); + /// Returns whether we have currently fetched all the frames of a stack. + bool WereAllFramesFetched() const; + protected: friend class Thread; friend class ScriptedThread; + /// Use this API to build a stack frame list (used for scripted threads, for + /// instance.) This API is not meant for StackFrameLists that have unwinders + /// and partake in lazy stack filling (using GetFramesUpTo). Rather if you + /// are building StackFrameLists with this API, you should build the entire + /// list before making it available for use. bool SetFrameAtIndex(uint32_t idx, lldb::StackFrameSP &frame_sp); - /// Realizes frames up to (and including) end_idx (which can be greater than - /// the actual number of frames.) + /// Ensures that frames up to (and including) `end_idx` are realized in the + /// StackFrameList. `end_idx` can be larger than the actual number of frames, + /// in which case all the frames will be fetched. Acquires the writer end of + /// the list mutex. /// Returns true if the function was interrupted, false otherwise. - bool GetFramesUpTo(uint32_t end_idx, - InterruptionControl allow_interrupt = AllowInterruption); - - void GetOnlyConcreteFramesUpTo(uint32_t end_idx, Unwind &unwinder); - - void SynthesizeTailCallFrames(StackFrame &next_frame); - - bool GetAllFramesFetched() { return m_concrete_frames_fetched == UINT32_MAX; } + /// Callers should first check (under the shared mutex) whether we need to + /// fetch frames or not. + bool GetFramesUpTo(uint32_t end_idx, InterruptionControl allow_interrupt); + + // This should be called with either the reader or writer end of the list + // mutex held: + bool GetAllFramesFetched() const { + return m_concrete_frames_fetched == UINT32_MAX; + } + // This should be called with the writer end of the list mutex held. void SetAllFramesFetched() { m_concrete_frames_fetched = UINT32_MAX; } bool DecrementCurrentInlinedDepth(); @@ -122,6 +135,9 @@ protected: void SetCurrentInlinedDepth(uint32_t new_depth); + /// Calls into the stack frame recognizers and stop info to set the most + /// relevant frame. This can call out to arbitrary user code so it can't + /// hold the StackFrameList mutex. void SelectMostRelevantFrame(); typedef std::vector collection; @@ -138,11 +154,16 @@ protected: // source of information. lldb::StackFrameListSP m_prev_frames_sp; - /// A mutex for this frame list. - // TODO: This mutex may not always be held when required. In particular, uses - // of the StackFrameList APIs in lldb_private::Thread look suspect. Consider - // passing around a lock_guard reference to enforce proper locking. - mutable std::recursive_mutex m_mutex; + /// A mutex for this frame list. The only public API that requires the + /// unique lock is Clear. All other clients take the shared lock, though + /// if we need more frames we may swap shared for unique to fulfill that + /// requirement. + mutable std::shared_mutex m_list_mutex; + + // Setting the inlined depth should be protected against other attempts to + // change it, but since it doesn't mutate the list itself, we can limit the + // critical regions it produces by having a separate mutex. + mutable std::mutex m_inlined_depth_mutex; /// A cache of frames. This may need to be updated when the program counter /// changes. @@ -171,6 +192,21 @@ protected: const bool m_show_inlined_frames; private: + uint32_t SetSelectedFrameNoLock(lldb_private::StackFrame *frame); + lldb::StackFrameSP + GetFrameAtIndexNoLock(uint32_t idx, + std::shared_lock &guard); + + /// These two Fetch frames APIs and SynthesizeTailCallFrames are called in + /// GetFramesUpTo, they are the ones that actually add frames. They must be + /// called with the writer end of the list mutex held. + + /// Returns true if fetching frames was interrupted, false otherwise. + bool FetchFramesUpTo(uint32_t end_idx, InterruptionControl allow_interrupt); + /// Not currently interruptible so returns void. + void FetchOnlyConcreteFramesUpTo(uint32_t end_idx); + void SynthesizeTailCallFrames(StackFrame &next_frame); + StackFrameList(const StackFrameList &) = delete; const StackFrameList &operator=(const StackFrameList &) = delete; }; diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp index 94a381edd5e2..9c6208e9e0a6 100644 --- a/lldb/source/Target/StackFrameList.cpp +++ b/lldb/source/Target/StackFrameList.cpp @@ -38,7 +38,7 @@ using namespace lldb_private; StackFrameList::StackFrameList(Thread &thread, const lldb::StackFrameListSP &prev_frames_sp, bool show_inline_frames) - : m_thread(thread), m_prev_frames_sp(prev_frames_sp), m_mutex(), m_frames(), + : m_thread(thread), m_prev_frames_sp(prev_frames_sp), m_frames(), m_selected_frame_idx(), m_concrete_frames_fetched(0), m_current_inlined_depth(UINT32_MAX), m_current_inlined_pc(LLDB_INVALID_ADDRESS), @@ -63,6 +63,7 @@ void StackFrameList::CalculateCurrentInlinedDepth() { } uint32_t StackFrameList::GetCurrentInlinedDepth() { + std::lock_guard guard(m_inlined_depth_mutex); if (m_show_inlined_frames && m_current_inlined_pc != LLDB_INVALID_ADDRESS) { lldb::addr_t cur_pc = m_thread.GetRegisterContext()->GetPC(); if (cur_pc != m_current_inlined_pc) { @@ -84,11 +85,6 @@ void StackFrameList::ResetCurrentInlinedDepth() { if (!m_show_inlined_frames) return; - std::lock_guard guard(m_mutex); - - m_current_inlined_pc = LLDB_INVALID_ADDRESS; - m_current_inlined_depth = UINT32_MAX; - StopInfoSP stop_info_sp = m_thread.GetStopInfo(); if (!stop_info_sp) return; @@ -98,6 +94,7 @@ void StackFrameList::ResetCurrentInlinedDepth() { // We're only adjusting the inlined stack here. Log *log = GetLog(LLDBLog::Step); if (inline_depth) { + std::lock_guard guard(m_inlined_depth_mutex); m_current_inlined_depth = *inline_depth; m_current_inlined_pc = m_thread.GetRegisterContext()->GetPC(); @@ -107,6 +104,9 @@ void StackFrameList::ResetCurrentInlinedDepth() { "depth: %d 0x%" PRIx64 ".\n", m_current_inlined_depth, m_current_inlined_pc); } else { + std::lock_guard guard(m_inlined_depth_mutex); + m_current_inlined_pc = LLDB_INVALID_ADDRESS; + m_current_inlined_depth = UINT32_MAX; if (log && log->GetVerbose()) LLDB_LOGF( log, @@ -119,6 +119,7 @@ bool StackFrameList::DecrementCurrentInlinedDepth() { uint32_t current_inlined_depth = GetCurrentInlinedDepth(); if (current_inlined_depth != UINT32_MAX) { if (current_inlined_depth > 0) { + std::lock_guard guard(m_inlined_depth_mutex); m_current_inlined_depth--; return true; } @@ -128,6 +129,7 @@ bool StackFrameList::DecrementCurrentInlinedDepth() { } void StackFrameList::SetCurrentInlinedDepth(uint32_t new_depth) { + std::lock_guard guard(m_inlined_depth_mutex); m_current_inlined_depth = new_depth; if (new_depth == UINT32_MAX) m_current_inlined_pc = LLDB_INVALID_ADDRESS; @@ -135,23 +137,9 @@ void StackFrameList::SetCurrentInlinedDepth(uint32_t new_depth) { m_current_inlined_pc = m_thread.GetRegisterContext()->GetPC(); } -void StackFrameList::GetOnlyConcreteFramesUpTo(uint32_t end_idx, - Unwind &unwinder) { - assert(m_thread.IsValid() && "Expected valid thread"); - assert(m_frames.size() <= end_idx && "Expected there to be frames to fill"); - - if (end_idx < m_concrete_frames_fetched) - return; - - uint32_t num_frames = unwinder.GetFramesUpTo(end_idx); - if (num_frames <= end_idx + 1) { - // Done unwinding. - m_concrete_frames_fetched = UINT32_MAX; - } - - // Don't create the frames eagerly. Defer this work to GetFrameAtIndex, - // which can lazily query the unwinder to create frames. - m_frames.resize(num_frames); +bool StackFrameList::WereAllFramesFetched() const { + std::shared_lock guard(m_list_mutex); + return GetAllFramesFetched(); } /// A sequence of calls that comprise some portion of a backtrace. Each frame @@ -167,6 +155,8 @@ using CallSequence = std::vector; /// Find the unique path through the call graph from \p begin (with return PC /// \p return_pc) to \p end. On success this path is stored into \p path, and /// on failure \p path is unchanged. +/// This function doesn't currently access StackFrameLists at all, it only looks +/// at the frame set in the ExecutionContext it passes around. static void FindInterveningFrames(Function &begin, Function &end, ExecutionContext &exe_ctx, Target &target, addr_t return_pc, CallSequence &path, @@ -350,23 +340,65 @@ void StackFrameList::SynthesizeTailCallFrames(StackFrame &next_frame) { bool StackFrameList::GetFramesUpTo(uint32_t end_idx, InterruptionControl allow_interrupt) { + // GetFramesUpTo is always called with the intent to add frames, so get the + // writer lock: + std::unique_lock guard(m_list_mutex); + // Now that we have the lock, check to make sure someone didn't get there + // ahead of us: + if (m_frames.size() > end_idx || GetAllFramesFetched()) + return false; + // Do not fetch frames for an invalid thread. bool was_interrupted = false; if (!m_thread.IsValid()) return false; - // We've already gotten more frames than asked for, or we've already finished - // unwinding, return. - if (m_frames.size() > end_idx || GetAllFramesFetched()) + // lock the writer side of m_list_mutex as we're going to add frames here: + if (!m_show_inlined_frames) { + if (end_idx < m_concrete_frames_fetched) + return false; + // We're adding concrete frames now: + // FIXME: This should also be interruptible: + FetchOnlyConcreteFramesUpTo(end_idx); return false; + } + + // We're adding concrete and inlined frames now: + was_interrupted = FetchFramesUpTo(end_idx, allow_interrupt); + +#if defined(DEBUG_STACK_FRAMES) + s.PutCString("\n\nNew frames:\n"); + Dump(&s); + s.EOL(); +#endif + return was_interrupted; +} + +void StackFrameList::FetchOnlyConcreteFramesUpTo(uint32_t end_idx) { + assert(m_thread.IsValid() && "Expected valid thread"); + assert(m_frames.size() <= end_idx && "Expected there to be frames to fill"); Unwind &unwinder = m_thread.GetUnwinder(); - if (!m_show_inlined_frames) { - GetOnlyConcreteFramesUpTo(end_idx, unwinder); - return false; + if (end_idx < m_concrete_frames_fetched) + return; + + uint32_t num_frames = unwinder.GetFramesUpTo(end_idx); + if (num_frames <= end_idx + 1) { + // Done unwinding. + m_concrete_frames_fetched = UINT32_MAX; } + // Don't create the frames eagerly. Defer this work to GetFrameAtIndex, + // which can lazily query the unwinder to create frames. + m_frames.resize(num_frames); +} + +bool StackFrameList::FetchFramesUpTo(uint32_t end_idx, + InterruptionControl allow_interrupt) { + Unwind &unwinder = m_thread.GetUnwinder(); + bool was_interrupted = false; + #if defined(DEBUG_STACK_FRAMES) StreamFile s(stdout, false); #endif @@ -421,11 +453,11 @@ bool StackFrameList::GetFramesUpTo(uint32_t end_idx, } else { // Check for interruption when building the frames. // Do the check in idx > 0 so that we'll always create a 0th frame. - if (allow_interrupt - && INTERRUPT_REQUESTED(dbg, "Interrupted having fetched {0} frames", - m_frames.size())) { - was_interrupted = true; - break; + if (allow_interrupt && + INTERRUPT_REQUESTED(dbg, "Interrupted having fetched {0} frames", + m_frames.size())) { + was_interrupted = true; + break; } const bool success = @@ -534,12 +566,6 @@ bool StackFrameList::GetFramesUpTo(uint32_t end_idx, // We are done with the old stack frame list, we can release it now. m_prev_frames_sp.reset(); } - -#if defined(DEBUG_STACK_FRAMES) - s.PutCString("\n\nNew frames:\n"); - Dump(&s); - s.EOL(); -#endif // Don't report interrupted if we happen to have gotten all the frames: if (!GetAllFramesFetched()) return was_interrupted; @@ -547,20 +573,23 @@ bool StackFrameList::GetFramesUpTo(uint32_t end_idx, } uint32_t StackFrameList::GetNumFrames(bool can_create) { - std::lock_guard guard(m_mutex); - - if (can_create) { + if (!WereAllFramesFetched() && can_create) { // Don't allow interrupt or we might not return the correct count - GetFramesUpTo(UINT32_MAX, DoNotAllowInterruption); + GetFramesUpTo(UINT32_MAX, DoNotAllowInterruption); + } + uint32_t frame_idx; + { + std::shared_lock guard(m_list_mutex); + frame_idx = GetVisibleStackFrameIndex(m_frames.size()); } - return GetVisibleStackFrameIndex(m_frames.size()); + return frame_idx; } void StackFrameList::Dump(Stream *s) { if (s == nullptr) return; - std::lock_guard guard(m_mutex); + std::shared_lock guard(m_list_mutex); const_iterator pos, begin = m_frames.begin(), end = m_frames.end(); for (pos = begin; pos != end; ++pos) { @@ -578,72 +607,53 @@ void StackFrameList::Dump(Stream *s) { StackFrameSP StackFrameList::GetFrameAtIndex(uint32_t idx) { StackFrameSP frame_sp; - std::lock_guard guard(m_mutex); uint32_t original_idx = idx; - uint32_t inlined_depth = GetCurrentInlinedDepth(); - if (inlined_depth != UINT32_MAX) - idx += inlined_depth; + // We're going to consult the m_frames.size, but if there are already + // enough frames for our request we don't want to block other readers, so + // first acquire the shared lock: + { // Scope for shared lock: + std::shared_lock guard(m_list_mutex); - if (idx < m_frames.size()) - frame_sp = m_frames[idx]; + uint32_t inlined_depth = GetCurrentInlinedDepth(); + if (inlined_depth != UINT32_MAX) + idx += inlined_depth; - if (frame_sp) - return frame_sp; + if (idx < m_frames.size()) + frame_sp = m_frames[idx]; + + if (frame_sp) + return frame_sp; + } // End of reader lock scope // GetFramesUpTo will fill m_frames with as many frames as you asked for, if // there are that many. If there weren't then you asked for too many frames. // GetFramesUpTo returns true if interrupted: - if (GetFramesUpTo(idx)) { + if (GetFramesUpTo(idx, AllowInterruption)) { Log *log = GetLog(LLDBLog::Thread); LLDB_LOG(log, "GetFrameAtIndex was interrupted"); return {}; } - if (idx < m_frames.size()) { - if (m_show_inlined_frames) { - // When inline frames are enabled we actually create all the frames in - // GetFramesUpTo. + { // Now we're accessing m_frames as a reader, so acquire the reader lock. + std::shared_lock guard(m_list_mutex); + if (idx < m_frames.size()) { frame_sp = m_frames[idx]; - } else { - addr_t pc, cfa; - bool behaves_like_zeroth_frame = (idx == 0); - if (m_thread.GetUnwinder().GetFrameInfoAtIndex( - idx, cfa, pc, behaves_like_zeroth_frame)) { - const bool cfa_is_valid = true; - frame_sp = std::make_shared( - m_thread.shared_from_this(), idx, idx, cfa, cfa_is_valid, pc, - StackFrame::Kind::Regular, behaves_like_zeroth_frame, nullptr); - - Function *function = - frame_sp->GetSymbolContext(eSymbolContextFunction).function; - if (function) { - // When we aren't showing inline functions we always use the top - // most function block as the scope. - frame_sp->SetSymbolContextScope(&function->GetBlock(false)); - } else { - // Set the symbol scope from the symbol regardless if it is nullptr - // or valid. - frame_sp->SetSymbolContextScope( - frame_sp->GetSymbolContext(eSymbolContextSymbol).symbol); - } - SetFrameAtIndex(idx, frame_sp); + } else if (original_idx == 0) { + // There should ALWAYS be a frame at index 0. If something went wrong + // with the CurrentInlinedDepth such that there weren't as many frames as + // we thought taking that into account, then reset the current inlined + // depth and return the real zeroth frame. + if (m_frames.empty()) { + // Why do we have a thread with zero frames, that should not ever + // happen... + assert(!m_thread.IsValid() && "A valid thread has no frames."); + } else { + ResetCurrentInlinedDepth(); + frame_sp = m_frames[original_idx]; } } - } else if (original_idx == 0) { - // There should ALWAYS be a frame at index 0. If something went wrong with - // the CurrentInlinedDepth such that there weren't as many frames as we - // thought taking that into account, then reset the current inlined depth - // and return the real zeroth frame. - if (m_frames.empty()) { - // Why do we have a thread with zero frames, that should not ever - // happen... - assert(!m_thread.IsValid() && "A valid thread has no frames."); - } else { - ResetCurrentInlinedDepth(); - frame_sp = m_frames[original_idx]; - } - } + } // End of reader lock scope return frame_sp; } @@ -675,19 +685,18 @@ StackFrameSP StackFrameList::GetFrameWithStackID(const StackID &stack_id) { StackFrameSP frame_sp; if (stack_id.IsValid()) { - std::lock_guard guard(m_mutex); uint32_t frame_idx = 0; - // Do a binary search in case the stack frame is already in our cache - collection::const_iterator begin = m_frames.begin(); - collection::const_iterator end = m_frames.end(); - if (begin != end) { + { + // First see if the frame is already realized. This is the scope for + // the shared mutex: + std::shared_lock guard(m_list_mutex); + // Do a binary search in case the stack frame is already in our cache collection::const_iterator pos = - std::lower_bound(begin, end, stack_id, CompareStackID); - if (pos != end) { - if ((*pos)->GetStackID() == stack_id) - return *pos; - } + llvm::lower_bound(m_frames, stack_id, CompareStackID); + if (pos != m_frames.end() && (*pos)->GetStackID() == stack_id) + return *pos; } + // If we needed to add more frames, we would get to here. do { frame_sp = GetFrameAtIndex(frame_idx); if (frame_sp && frame_sp->GetStackID() == stack_id) @@ -699,6 +708,7 @@ StackFrameSP StackFrameList::GetFrameWithStackID(const StackID &stack_id) { } bool StackFrameList::SetFrameAtIndex(uint32_t idx, StackFrameSP &frame_sp) { + std::unique_lock guard(m_list_mutex); if (idx >= m_frames.size()) m_frames.resize(idx + 1); // Make sure allocation succeeded by checking bounds again @@ -738,7 +748,7 @@ void StackFrameList::SelectMostRelevantFrame() { } LLDB_LOG(log, "Frame #0 not recognized"); - // If this thread has a non-trivial StopInof, then let it suggest + // If this thread has a non-trivial StopInfo, then let it suggest // a most relevant frame: StopInfoSP stop_info_sp = m_thread.GetStopInfo(); uint32_t stack_idx = 0; @@ -771,9 +781,8 @@ void StackFrameList::SelectMostRelevantFrame() { LLDB_LOG(log, "No relevant frame!"); } -uint32_t StackFrameList::GetSelectedFrameIndex( - SelectMostRelevant select_most_relevant) { - std::lock_guard guard(m_mutex); +uint32_t +StackFrameList::GetSelectedFrameIndex(SelectMostRelevant select_most_relevant) { if (!m_selected_frame_idx && select_most_relevant) SelectMostRelevantFrame(); if (!m_selected_frame_idx) { @@ -788,7 +797,8 @@ uint32_t StackFrameList::GetSelectedFrameIndex( } uint32_t StackFrameList::SetSelectedFrame(lldb_private::StackFrame *frame) { - std::lock_guard guard(m_mutex); + std::shared_lock guard(m_list_mutex); + const_iterator pos; const_iterator begin = m_frames.begin(); const_iterator end = m_frames.end(); @@ -803,13 +813,11 @@ uint32_t StackFrameList::SetSelectedFrame(lldb_private::StackFrame *frame) { break; } } - SetDefaultFileAndLineToSelectedFrame(); return *m_selected_frame_idx; } bool StackFrameList::SetSelectedFrameByIndex(uint32_t idx) { - std::lock_guard guard(m_mutex); StackFrameSP frame_sp(GetFrameAtIndex(idx)); if (frame_sp) { SetSelectedFrame(frame_sp.get()); @@ -840,7 +848,7 @@ void StackFrameList::SetDefaultFileAndLineToSelectedFrame() { // does not describe how StackFrameLists are currently used. // Clear is currently only used to clear the list in the destructor. void StackFrameList::Clear() { - std::lock_guard guard(m_mutex); + std::unique_lock guard(m_list_mutex); m_frames.clear(); m_concrete_frames_fetched = 0; m_selected_frame_idx.reset(); @@ -848,6 +856,7 @@ void StackFrameList::Clear() { lldb::StackFrameSP StackFrameList::GetStackFrameSPForStackFramePtr(StackFrame *stack_frame_ptr) { + std::shared_lock guard(m_list_mutex); const_iterator pos; const_iterator begin = m_frames.begin(); const_iterator end = m_frames.end(); diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp index fb1727605190..a6130f6b925b 100644 --- a/lldb/source/Target/Thread.cpp +++ b/lldb/source/Target/Thread.cpp @@ -1449,7 +1449,7 @@ void Thread::ClearStackFrames() { // frames: // FIXME: At some point we can try to splice in the frames we have fetched // into the new frame as we make it, but let's not try that now. - if (m_curr_frames_sp && m_curr_frames_sp->GetAllFramesFetched()) + if (m_curr_frames_sp && m_curr_frames_sp->WereAllFramesFetched()) m_prev_frames_sp.swap(m_curr_frames_sp); m_curr_frames_sp.reset(); diff --git a/lldb/test/API/api/multithreaded/TestMultithreaded.py b/lldb/test/API/api/multithreaded/TestMultithreaded.py index 07c9f5b9bbcc..d5b29ec7af18 100644 --- a/lldb/test/API/api/multithreaded/TestMultithreaded.py +++ b/lldb/test/API/api/multithreaded/TestMultithreaded.py @@ -22,6 +22,7 @@ class SBBreakpointCallbackCase(TestBase): self.generateSource("test_listener_event_process_state.cpp") self.generateSource("test_listener_resume.cpp") self.generateSource("test_stop-hook.cpp") + self.generateSource("test_concurrent_unwind.cpp") @skipIfRemote # clang-cl does not support throw or catch (llvm.org/pr24538) @@ -91,7 +92,19 @@ class SBBreakpointCallbackCase(TestBase): "test_listener_resume", ) - def build_and_test(self, sources, test_name, args=None): + @skipIfRemote + # clang-cl does not support throw or catch (llvm.org/pr24538) + @skipIfWindows + @skipIfHostIncompatibleWithTarget + def test_concurrent_unwind(self): + """Test that you can run a python command in a stop-hook when stdin is File based.""" + self.build_and_test( + "driver.cpp test_concurrent_unwind.cpp", + "test_concurrent_unwind", + inferior_source="deep_stack.cpp", + ) + + def build_and_test(self, sources, test_name, inferior_source="inferior.cpp"): """Build LLDB test from sources, and run expecting 0 exit code""" # These tests link against host lldb API. @@ -104,7 +117,7 @@ class SBBreakpointCallbackCase(TestBase): ) self.inferior = "inferior_program" - self.buildProgram("inferior.cpp", self.inferior) + self.buildProgram(inferior_source, self.inferior) self.addTearDownHook(lambda: os.remove(self.getBuildArtifact(self.inferior))) self.buildDriver(sources, test_name) diff --git a/lldb/test/API/api/multithreaded/deep_stack.cpp b/lldb/test/API/api/multithreaded/deep_stack.cpp new file mode 100644 index 000000000000..da89228766e4 --- /dev/null +++ b/lldb/test/API/api/multithreaded/deep_stack.cpp @@ -0,0 +1,17 @@ +// This is a test program that makes a deep stack +// so we can test unwinding from multiple threads. + +void call_me(int input) { + if (input > 1000) { + input += 1; // Set a breakpoint here + if (input > 1001) + input += 1; + return; + } else + call_me(++input); +} + +int main() { + call_me(0); + return 0; +} diff --git a/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template b/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template new file mode 100644 index 000000000000..e5101dde7961 --- /dev/null +++ b/lldb/test/API/api/multithreaded/test_concurrent_unwind.cpp.template @@ -0,0 +1,91 @@ +#include "pseudo_barrier.h" + +#include +#include + +%include_SB_APIs% + +#include "common.h" + +using namespace lldb; + +void test (SBDebugger &dbg, std::vector args) { + +SBError error; + dbg.SetAsync(false); + SBTarget target = dbg.CreateTarget(args.at(0).c_str()); + if (!target.IsValid()) + throw Exception("Invalid target"); + + // Now set our breakpoint and launch: + SBFileSpec main_sourcefile("deep_stack.cpp"); + SBBreakpoint bkpt = target.BreakpointCreateBySourceRegex("Set a breakpoint here", + main_sourcefile); + if (bkpt.GetNumLocations() == 0) + throw Exception("Main breakpoint got no locations"); + + SBLaunchInfo launch_info = target.GetLaunchInfo(); + SBProcess process = target.Launch(launch_info, error); + if (error.Fail()) + throw Exception("Failed to launch process"); + if (!process.IsValid()) + throw Exception("Process is not valid"); + if (process.GetState() != lldb::eStateStopped) + throw Exception("Process was not stopped"); + + size_t num_threads = process.GetNumThreads(); + if (num_threads != 1) + throw Exception("Unexpected number of threads."); + SBThread cur_thread = process.GetThreadAtIndex(0); + if (!cur_thread.IsValid()) + throw Exception("Didn't get a valid thread"); + + // Record the number of frames at the point where we stopped: + const size_t num_frames = cur_thread.GetNumFrames(); + // Now step once to clear the frame cache: + cur_thread.StepOver(); + + // Create three threads and set them to getting frames simultaneously, + // and make sure we don't deadlock. + pseudo_barrier_t rendevous; + pseudo_barrier_init(rendevous, 5); + std::atomic_size_t success(true); + std::atomic_size_t largest(0); + + auto lambda = [&](size_t stride){ + pseudo_barrier_wait(rendevous); + bool younger = true; + while (1) { + size_t cursor = largest; + if (cursor > stride && !younger) { + cursor -= stride; + younger = true; + } else { + cursor += stride; + largest += stride; + younger = false; + } + SBFrame frame = cur_thread.GetFrameAtIndex(cursor); + if (!frame.IsValid()) { + if (cursor < num_frames) + success = false; + break; + } + } + + }; + + std::thread thread1(lambda, 1); + std::thread thread2(lambda, 3); + std::thread thread3(lambda, 5); + std::thread thread4(lambda, 7); + std::thread thread5(lambda, 11); + thread1.join(); + thread2.join(); + thread3.join(); + thread4.join(); + thread5.join(); + + if (!success) + throw Exception("One thread stopped before 1000"); +} -- cgit v1.2.3 From 5048808859eece3aaa680aaecb4a89dfabe9627b Mon Sep 17 00:00:00 2001 From: erichkeane Date: Thu, 12 Dec 2024 12:33:33 -0800 Subject: [OpenACC] Implement 'default' Sema for 'data' clause No additional rules here beyond enabling it, this patch just enables 'default' and adds tests. --- clang/lib/Sema/SemaOpenACC.cpp | 8 --- .../test/AST/ast-print-openacc-data-construct.cpp | 19 ++++-- .../SemaOpenACC/combined-construct-default-ast.cpp | 1 - .../combined-construct-default-clause.c | 1 - .../SemaOpenACC/compute-construct-default-clause.c | 1 - clang/test/SemaOpenACC/data-construct-ast.cpp | 3 + .../SemaOpenACC/data-construct-default-ast.cpp | 68 ++++++++++++++++++++++ .../SemaOpenACC/data-construct-default-clause.c | 24 ++++++++ clang/test/SemaOpenACC/data-construct-if-ast.cpp | 3 + clang/test/SemaOpenACC/data-construct-if-clause.c | 2 - clang/test/SemaOpenACC/data-construct.cpp | 1 - 11 files changed, 111 insertions(+), 20 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-default-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-default-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 655d3b4ad634..99daa3eba628 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -587,14 +587,6 @@ public: OpenACCClause *SemaOpenACCClauseVisitor::VisitDefaultClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. - // Only 'data' is left. - if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) - return isNotImplemented(); - // Don't add an invalid clause to the AST. if (Clause.getDefaultClauseKind() == OpenACCDefaultClauseKind::Invalid) return nullptr; diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 8e1d3efbf3c4..3e828b594bc9 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -6,8 +6,7 @@ void foo() { // them, so the 'check' lines should start to include those once we implement // them. For now, they don't emit those because they are 'not implemented'. -// CHECK: #pragma acc data -// CHECK-NOT: default(none) +// CHECK: #pragma acc data default(none) #pragma acc data default(none) ; @@ -32,7 +31,7 @@ void foo() { int *iPtr; int array[5]; -// CHECK: #pragma acc data if(i == array[1]) +// CHECK: #pragma acc data default(none) if(i == array[1]) #pragma acc data default(none) if(i == array[1]) ; // CHECK: #pragma acc enter data if(i == array[1]) @@ -45,7 +44,7 @@ void foo() { #pragma acc host_data use_device(Var) if(i == array[1]) ; -// CHECK: #pragma acc data async(i) +// CHECK: #pragma acc data default(none) async(i) #pragma acc data default(none) async(i) ; // CHECK: #pragma acc enter data async(i) @@ -53,7 +52,7 @@ void foo() { // CHECK: #pragma acc exit data async #pragma acc exit data copyout(i) async -// CHECK: #pragma acc data wait +// CHECK: #pragma acc data default(none) wait #pragma acc data default(none) wait() ; @@ -63,7 +62,7 @@ void foo() { // CHECK: #pragma acc exit data wait(*iPtr, i) #pragma acc exit data copyout(Var) wait(*iPtr, i) -// CHECK: #pragma acc data wait(queues: *iPtr, i) +// CHECK: #pragma acc data default(none) wait(queues: *iPtr, i) #pragma acc data default(none) wait(queues:*iPtr, i) ; @@ -72,4 +71,12 @@ void foo() { // CHECK: #pragma acc exit data wait(devnum: i : queues: *iPtr, i) #pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i) + +// CHECK: #pragma acc data default(none) +#pragma acc data default(none) + ; + +// CHECK: #pragma acc data default(present) +#pragma acc data default(present) + ; } diff --git a/clang/test/SemaOpenACC/combined-construct-default-ast.cpp b/clang/test/SemaOpenACC/combined-construct-default-ast.cpp index 2ff24b32afe7..8f09e7490731 100644 --- a/clang/test/SemaOpenACC/combined-construct-default-ast.cpp +++ b/clang/test/SemaOpenACC/combined-construct-default-ast.cpp @@ -1,4 +1,3 @@ - // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s // Test this with PCH. diff --git a/clang/test/SemaOpenACC/combined-construct-default-clause.c b/clang/test/SemaOpenACC/combined-construct-default-clause.c index 7e384ccfc17a..43c2883f1318 100644 --- a/clang/test/SemaOpenACC/combined-construct-default-clause.c +++ b/clang/test/SemaOpenACC/combined-construct-default-clause.c @@ -28,7 +28,6 @@ void SingleOnly() { #pragma acc kernels loop default(none) for(int i = 0; i < 5; ++i); - // expected-warning@+1{{OpenACC clause 'default' not yet implemented}} #pragma acc data default(none) while(0); diff --git a/clang/test/SemaOpenACC/compute-construct-default-clause.c b/clang/test/SemaOpenACC/compute-construct-default-clause.c index 4aef2cbd7aec..dfa5cd3f1c0d 100644 --- a/clang/test/SemaOpenACC/compute-construct-default-clause.c +++ b/clang/test/SemaOpenACC/compute-construct-default-clause.c @@ -28,7 +28,6 @@ void SingleOnly() { #pragma acc kernels default(none) for(int i = 0; i < 5; ++i); - // expected-warning@+1{{OpenACC clause 'default' not yet implemented}} #pragma acc data default(none) while(0); diff --git a/clang/test/SemaOpenACC/data-construct-ast.cpp b/clang/test/SemaOpenACC/data-construct-ast.cpp index 9a7fe2cb793a..60ed295fcd42 100644 --- a/clang/test/SemaOpenACC/data-construct-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-ast.cpp @@ -22,6 +22,7 @@ void NormalFunc() { #pragma acc data default(none) while (Var); // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: default(none) // CHECK-NEXT: WhileStmt // CHECK: NullStmt #pragma acc enter data copyin(Var) @@ -49,6 +50,7 @@ void TemplFunc() { #pragma acc data default(none) while (Var); // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: default(none) // CHECK-NEXT: WhileStmt // CHECK: NullStmt #pragma acc enter data copyin(Var) @@ -71,6 +73,7 @@ void TemplFunc() { // CHECK-NEXT: VarDecl // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: default(none) // CHECK-NEXT: WhileStmt // CHECK: NullStmt diff --git a/clang/test/SemaOpenACC/data-construct-default-ast.cpp b/clang/test/SemaOpenACC/data-construct-default-ast.cpp new file mode 100644 index 000000000000..ef9b1348c670 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-default-ast.cpp @@ -0,0 +1,68 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER +void NormalFunc() { + // CHECK-LABEL: NormalFunc + // CHECK-NEXT: CompoundStmt + // CHECK-NEXT: OpenACCDataConstruct {{.*}}data + // CHECK-NEXT: default(none) +#pragma acc data default(none) + // CHECK: OpenACCDataConstruct {{.*}}data + // CHECK-NEXT: default(present) +#pragma acc data default(present) + ; +} +template +void TemplFunc() { +#pragma acc data default(none) + for (unsigned i = 0; i < 5; ++i) { + typename T::type I; + } + +#pragma acc data default(present) + for (unsigned i = 0; i < 5; ++i) { + typename T::type I; + } + + // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc + // CHECK-NEXT: TemplateTypeParmDecl + + // Template Pattern: + // CHECK-NEXT: FunctionDecl + // CHECK-NEXT: CompoundStmt + // CHECK-NEXT: OpenACCDataConstruct {{.*}}data + // CHECK-NEXT: default(none) + // CHECK: VarDecl{{.*}} I 'typename T::type' + + // CHECK-NEXT: OpenACCDataConstruct {{.*}}data + // CHECK-NEXT: default(present) + // CHECK: VarDecl{{.*}} I 'typename T::type' + + // Check instantiation. + // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation + // CHECK-NEXT: TemplateArgument type 'S' + // CHECK-NEXT: RecordType + // CHECK-NEXT: CXXRecord + // CHECK-NEXT: CompoundStmt + // CHECK-NEXT: OpenACCDataConstruct {{.*}}data + // CHECK-NEXT: default(none) + // CHECK: VarDecl{{.*}} I 'typename S::type':'int' + // CHECK-NEXT: OpenACCDataConstruct {{.*}}data + // CHECK-NEXT: default(present) + // CHECK: VarDecl{{.*}} I 'typename S::type':'int' + +} +struct S { + using type = int; +}; + +void use() { + TemplFunc(); +} + +#endif diff --git a/clang/test/SemaOpenACC/data-construct-default-clause.c b/clang/test/SemaOpenACC/data-construct-default-clause.c new file mode 100644 index 000000000000..e09004d7404c --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-default-clause.c @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +void use() { + // expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}} +#pragma acc data default(garbage) + ; +#pragma acc data default(present) + ; +#pragma acc data default(none) + ; + // expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'data' directive}} + // expected-note@+1{{previous clause is here}} +#pragma acc data default(none) default(present) + ; + // expected-error@+1{{OpenACC 'default' clause is not valid on 'enter data' directive}} +#pragma acc enter data default(present) + ; + // expected-error@+1{{OpenACC 'default' clause is not valid on 'exit data' directive}} +#pragma acc exit data default(none) + ; + // expected-error@+1{{OpenACC 'default' clause is not valid on 'host_data' directive}} +#pragma acc host_data default(present) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct-if-ast.cpp b/clang/test/SemaOpenACC/data-construct-if-ast.cpp index 5a7e5942211d..a522b30357df 100644 --- a/clang/test/SemaOpenACC/data-construct-if-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-if-ast.cpp @@ -21,6 +21,7 @@ void NormalFunc(int j, float f) { // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int' // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float' + // CHECK-NEXT: default(none) // CHECK-NEXT: NullStmt } @@ -39,6 +40,7 @@ void TemplFunc() { #pragma acc data default(none) if(T::SomeFloat < typename T::IntTy{}) ; // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: default(none) // CHECK-NEXT: if clause // CHECK-NEXT: BinaryOperator{{.*}} '' '<' // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue @@ -79,6 +81,7 @@ void TemplFunc() { // CHECK-NEXT: CompoundStmt // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: default(none) // CHECK-NEXT: if clause // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<' // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' diff --git a/clang/test/SemaOpenACC/data-construct-if-clause.c b/clang/test/SemaOpenACC/data-construct-if-clause.c index b57eb28d29db..906b252d219b 100644 --- a/clang/test/SemaOpenACC/data-construct-if-clause.c +++ b/clang/test/SemaOpenACC/data-construct-if-clause.c @@ -2,10 +2,8 @@ void Foo() { int Var; - // expected-warning@+1{{OpenACC clause 'default' not yet implemented}} #pragma acc data default(present) if(1) ; - // expected-warning@+3{{OpenACC clause 'default' not yet implemented}} // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc data default(present) if(1) if (2) diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 1e145c197834..2df68cc9bba4 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -45,7 +45,6 @@ void AtLeastOneOf() { // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} #pragma acc data attach(Var) ; - // expected-warning@+1{{OpenACC clause 'default' not yet implemented}} #pragma acc data default(none) ; -- cgit v1.2.3 From 9b65b1ef25723fcbb61f1ca25a6abbe678bb1770 Mon Sep 17 00:00:00 2001 From: knickish Date: Thu, 12 Dec 2024 15:15:43 -0600 Subject: [M68k] update dissassmbly test to require atLeastM68020 for BSR32 (#119758) Fixes test failure reported in #117371. `BSR32` was previously (incorrectly) allowed for CPUs Date: Thu, 12 Dec 2024 13:17:51 -0800 Subject: [libc][docs] move docgen from json to yaml (#119744) That way it can more easily be integrated into hdrgen. --- libc/utils/docgen/arpa/inet.json | 28 ---- libc/utils/docgen/arpa/inet.yaml | 18 +++ libc/utils/docgen/assert.json | 11 -- libc/utils/docgen/assert.yaml | 7 + libc/utils/docgen/ctype.json | 102 --------------- libc/utils/docgen/ctype.yaml | 72 +++++++++++ libc/utils/docgen/docgen.py | 18 +-- libc/utils/docgen/errno.json | 20 --- libc/utils/docgen/errno.yaml | 14 ++ libc/utils/docgen/fenv.json | 136 -------------------- libc/utils/docgen/fenv.yaml | 97 ++++++++++++++ libc/utils/docgen/float.json | 201 ----------------------------- libc/utils/docgen/float.yaml | 143 +++++++++++++++++++++ libc/utils/docgen/header.py | 4 +- libc/utils/docgen/inttypes.json | 28 ---- libc/utils/docgen/inttypes.yaml | 20 +++ libc/utils/docgen/locale.json | 53 -------- libc/utils/docgen/locale.yaml | 37 ++++++ libc/utils/docgen/setjmp.json | 23 ---- libc/utils/docgen/setjmp.yaml | 15 +++ libc/utils/docgen/signal.json | 152 ---------------------- libc/utils/docgen/signal.yaml | 102 +++++++++++++++ libc/utils/docgen/stdbit.json | 270 --------------------------------------- libc/utils/docgen/stdbit.yaml | 179 ++++++++++++++++++++++++++ libc/utils/docgen/stdlib.json | 217 ------------------------------- libc/utils/docgen/stdlib.yaml | 158 +++++++++++++++++++++++ libc/utils/docgen/string.json | 130 ------------------- libc/utils/docgen/string.yaml | 94 ++++++++++++++ libc/utils/docgen/strings.json | 40 ------ libc/utils/docgen/sys/mman.json | 43 ------- libc/utils/docgen/sys/mman.yaml | 77 +++++++++++ libc/utils/docgen/threads.json | 120 ----------------- libc/utils/docgen/threads.yaml | 88 +++++++++++++ libc/utils/docgen/uchar.json | 31 ----- libc/utils/docgen/uchar.yaml | 21 +++ libc/utils/docgen/wchar.json | 198 ---------------------------- libc/utils/docgen/wchar.yaml | 131 +++++++++++++++++++ libc/utils/docgen/wctype.json | 58 --------- libc/utils/docgen/wctype.yaml | 36 ++++++ 39 files changed, 1320 insertions(+), 1872 deletions(-) delete mode 100644 libc/utils/docgen/arpa/inet.json create mode 100644 libc/utils/docgen/arpa/inet.yaml delete mode 100644 libc/utils/docgen/assert.json create mode 100644 libc/utils/docgen/assert.yaml delete mode 100644 libc/utils/docgen/ctype.json create mode 100644 libc/utils/docgen/ctype.yaml delete mode 100644 libc/utils/docgen/errno.json create mode 100644 libc/utils/docgen/errno.yaml delete mode 100644 libc/utils/docgen/fenv.json create mode 100644 libc/utils/docgen/fenv.yaml delete mode 100644 libc/utils/docgen/float.json create mode 100644 libc/utils/docgen/float.yaml delete mode 100644 libc/utils/docgen/inttypes.json create mode 100644 libc/utils/docgen/inttypes.yaml delete mode 100644 libc/utils/docgen/locale.json create mode 100644 libc/utils/docgen/locale.yaml delete mode 100644 libc/utils/docgen/setjmp.json create mode 100644 libc/utils/docgen/setjmp.yaml delete mode 100644 libc/utils/docgen/signal.json create mode 100644 libc/utils/docgen/signal.yaml delete mode 100644 libc/utils/docgen/stdbit.json create mode 100644 libc/utils/docgen/stdbit.yaml delete mode 100644 libc/utils/docgen/stdlib.json create mode 100644 libc/utils/docgen/stdlib.yaml delete mode 100644 libc/utils/docgen/string.json create mode 100644 libc/utils/docgen/string.yaml delete mode 100644 libc/utils/docgen/strings.json delete mode 100644 libc/utils/docgen/sys/mman.json create mode 100644 libc/utils/docgen/sys/mman.yaml delete mode 100644 libc/utils/docgen/threads.json create mode 100644 libc/utils/docgen/threads.yaml delete mode 100644 libc/utils/docgen/uchar.json create mode 100644 libc/utils/docgen/uchar.yaml delete mode 100644 libc/utils/docgen/wchar.json create mode 100644 libc/utils/docgen/wchar.yaml delete mode 100644 libc/utils/docgen/wctype.json create mode 100644 libc/utils/docgen/wctype.yaml diff --git a/libc/utils/docgen/arpa/inet.json b/libc/utils/docgen/arpa/inet.json deleted file mode 100644 index 0e788c57d5f7..000000000000 --- a/libc/utils/docgen/arpa/inet.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "functions": { - "htonl" : { - "posix-definition": "" - }, - "htons": { - "posix-definition": "" - }, - "ntohl": { - "posix-definition": "" - }, - "ntohs": { - "posix-definition": "" - }, - "inet_addr": { - "posix-definition": "" - }, - "inet_ntoa": { - "posix-definition": "" - }, - "inet_ntop": { - "posix-definition": "" - }, - "inet_pton": { - "posix-definition": "" - } - } -} diff --git a/libc/utils/docgen/arpa/inet.yaml b/libc/utils/docgen/arpa/inet.yaml new file mode 100644 index 000000000000..7f388cbbd020 --- /dev/null +++ b/libc/utils/docgen/arpa/inet.yaml @@ -0,0 +1,18 @@ +functions: + htonl: + posix-definition: '' + htons: + posix-definition: '' + inet_addr: + posix-definition: '' + inet_ntoa: + posix-definition: '' + inet_ntop: + posix-definition: '' + inet_pton: + posix-definition: '' + ntohl: + posix-definition: '' + ntohs: + posix-definition: '' + diff --git a/libc/utils/docgen/assert.json b/libc/utils/docgen/assert.json deleted file mode 100644 index ed9249cf426a..000000000000 --- a/libc/utils/docgen/assert.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_ASSERT_H__": { - "c-definition": "7.2.1" - }, - "assert": { - "c-definition": "7.2.1", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/assert.yaml b/libc/utils/docgen/assert.yaml new file mode 100644 index 000000000000..0afd4e2d3c06 --- /dev/null +++ b/libc/utils/docgen/assert.yaml @@ -0,0 +1,7 @@ +macros: + __STDC_VERSION_ASSERT_H__: + c-definition: 7.2.1 + assert: + c-definition: 7.2.1 + in-latest-posix: '' + diff --git a/libc/utils/docgen/ctype.json b/libc/utils/docgen/ctype.json deleted file mode 100644 index 7c6137570760..000000000000 --- a/libc/utils/docgen/ctype.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "functions": { - "isalnum": { - "c-definition": "7.4.1.1", - "in-latest-posix": "" - }, - "isalnum_l": { - "in-latest-posix": "" - }, - "isalpha": { - "c-definition": "7.4.1.2", - "in-latest-posix": "" - }, - "isalpha_l": { - "in-latest-posix": "" - }, - "isblank": { - "c-definition": "7.4.1.3", - "in-latest-posix": "" - }, - "isblank_l": { - "in-latest-posix": "" - }, - "iscntrl": { - "c-definition": "7.4.1.4", - "in-latest-posix": "" - }, - "iscntrl_l": { - "in-latest-posix": "" - }, - "isdigit": { - "c-definition": "7.4.1.5", - "in-latest-posix": "" - }, - "isdigit_l": { - "in-latest-posix": "" - }, - "isgraph": { - "c-definition": "7.4.1.6", - "in-latest-posix": "" - }, - "isgraph_l": { - "in-latest-posix": "" - }, - "islower": { - "c-definition": "7.4.1.7", - "in-latest-posix": "" - }, - "islower_l": { - "in-latest-posix": "" - }, - "isprint": { - "c-definition": "7.4.1.8", - "in-latest-posix": "" - }, - "isprint_l": { - "in-latest-posix": "" - }, - "ispunct": { - "c-definition": "7.4.1.9", - "in-latest-posix": "" - }, - "ispunct_l": { - "in-latest-posix": "" - }, - "isspace": { - "c-definition": "7.4.1.10", - "in-latest-posix": "" - }, - "isspace_l": { - "in-latest-posix": "" - }, - "isupper": { - "c-definition": "7.4.1.11", - "in-latest-posix": "" - }, - "isupper_l": { - "in-latest-posix": "" - }, - "isxdigit": { - "c-definition": "7.4.1.12", - "in-latest-posix": "" - }, - "isxdigit_l": { - "in-latest-posix": "" - }, - "tolower" : { - "c-definition": "7.4.2.1", - "in-latest-posix": "" - }, - "tolower_l" : { - "in-latest-posix": "" - }, - "toupper": { - "c-definition": "7.4.2.2", - "in-latest-posix": "" - }, - "toupper_l": { - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/ctype.yaml b/libc/utils/docgen/ctype.yaml new file mode 100644 index 000000000000..027d8f38c71f --- /dev/null +++ b/libc/utils/docgen/ctype.yaml @@ -0,0 +1,72 @@ +functions: + isalnum: + c-definition: 7.4.1.1 + in-latest-posix: '' + isalnum_l: + in-latest-posix: '' + isalpha: + c-definition: 7.4.1.2 + in-latest-posix: '' + isalpha_l: + in-latest-posix: '' + isblank: + c-definition: 7.4.1.3 + in-latest-posix: '' + isblank_l: + in-latest-posix: '' + iscntrl: + c-definition: 7.4.1.4 + in-latest-posix: '' + iscntrl_l: + in-latest-posix: '' + isdigit: + c-definition: 7.4.1.5 + in-latest-posix: '' + isdigit_l: + in-latest-posix: '' + isgraph: + c-definition: 7.4.1.6 + in-latest-posix: '' + isgraph_l: + in-latest-posix: '' + islower: + c-definition: 7.4.1.7 + in-latest-posix: '' + islower_l: + in-latest-posix: '' + isprint: + c-definition: 7.4.1.8 + in-latest-posix: '' + isprint_l: + in-latest-posix: '' + ispunct: + c-definition: 7.4.1.9 + in-latest-posix: '' + ispunct_l: + in-latest-posix: '' + isspace: + c-definition: 7.4.1.10 + in-latest-posix: '' + isspace_l: + in-latest-posix: '' + isupper: + c-definition: 7.4.1.11 + in-latest-posix: '' + isupper_l: + in-latest-posix: '' + isxdigit: + c-definition: 7.4.1.12 + in-latest-posix: '' + isxdigit_l: + in-latest-posix: '' + tolower: + c-definition: 7.4.2.1 + in-latest-posix: '' + tolower_l: + in-latest-posix: '' + toupper: + c-definition: 7.4.2.2 + in-latest-posix: '' + toupper_l: + in-latest-posix: '' + diff --git a/libc/utils/docgen/docgen.py b/libc/utils/docgen/docgen.py index 5355dff3e2a6..09db284ef928 100755 --- a/libc/utils/docgen/docgen.py +++ b/libc/utils/docgen/docgen.py @@ -10,9 +10,9 @@ from argparse import ArgumentParser, Namespace from pathlib import Path from typing import Dict -import json import os import sys +import yaml from header import Header @@ -23,14 +23,14 @@ class DocgenAPIFormatError(Exception): def check_api(header: Header, api: Dict): """ - Checks that docgen json files are properly formatted. If there are any + Checks that docgen yaml files are properly formatted. If there are any fatal formatting errors, raises exceptions with error messages useful for fixing formatting. Warnings are printed to stderr on non-fatal formatting errors. The code that runs after ``check_api(api)`` is called expects that - ``check_api`` executed without raising formatting exceptions so the json + ``check_api`` executed without raising formatting exceptions so the yaml matches the formatting specified here. - The json file may contain: + The yaml file may contain: * an optional macros object * an optional functions object @@ -49,7 +49,7 @@ def check_api(header: Header, api: Dict): this should be a C standard section number. For the ``"posix-definition"`` property, this should be a link to the definition. - :param api: docgen json file contents parsed into a dict + :param api: docgen yaml file contents parsed into a dict """ errors = [] # We require entries to have at least one of these. @@ -93,8 +93,8 @@ def check_api(header: Header, api: Dict): def load_api(header: Header) -> Dict: - api = header.docgen_json.read_text(encoding="utf-8") - return json.loads(api) + api = header.docgen_yaml.read_text(encoding="utf-8") + return yaml.safe_load(api) def print_tbl_dir(name): @@ -192,12 +192,12 @@ def print_impl_status_rst(header: Header, api: Dict): print_functions_rst(header, api["functions"]) -# This code implicitly relies on docgen.py being in the same dir as the json +# This code implicitly relies on docgen.py being in the same dir as the yaml # files and is likely to need to be fixed when re-integrating docgen into # hdrgen. def get_choices() -> list: choices = [] - for path in Path(__file__).parent.rglob("*.json"): + for path in Path(__file__).parent.rglob("*.yaml"): fname = path.with_suffix(".h").name if path.parent != Path(__file__).parent: fname = path.parent.name + os.sep + fname diff --git a/libc/utils/docgen/errno.json b/libc/utils/docgen/errno.json deleted file mode 100644 index 7f13e06ac328..000000000000 --- a/libc/utils/docgen/errno.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "macros": { - "EDOM": { - "c-definition": "7.5", - "in-latest-posix": "" - }, - "EILSEQ": { - "c-definition": "7.5", - "in-latest-posix": "" - }, - "ERANGE": { - "c-definition": "7.5", - "in-latest-posix": "" - }, - "errno": { - "c-definition": "7.5", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/errno.yaml b/libc/utils/docgen/errno.yaml new file mode 100644 index 000000000000..da41552bc3a1 --- /dev/null +++ b/libc/utils/docgen/errno.yaml @@ -0,0 +1,14 @@ +macros: + EDOM: + c-definition: '7.5' + in-latest-posix: '' + EILSEQ: + c-definition: '7.5' + in-latest-posix: '' + ERANGE: + c-definition: '7.5' + in-latest-posix: '' + errno: + c-definition: '7.5' + in-latest-posix: '' + diff --git a/libc/utils/docgen/fenv.json b/libc/utils/docgen/fenv.json deleted file mode 100644 index cf58d70ebcf1..000000000000 --- a/libc/utils/docgen/fenv.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_FENV_H__": { - "c-definition": "7.6.5" - }, - "FE_DIVBYZERO": { - "c-definition": "7.6.9", - "in-latest-posix": "" - }, - "FE_INEXACT": { - "c-definition": "7.6.9", - "in-latest-posix": "" - }, - "FE_INVALID": { - "c-definition": "7.6.9", - "in-latest-posix": "" - }, - "FE_OVERFLOW": { - "c-definition": "7.6.9", - "in-latest-posix": "" - }, - "FE_UNDERFLOW": { - "c-definition": "7.6.9", - "in-latest-posix": "" - }, - "FE_ALL_EXCEPT": { - "c-definition": "7.6.12", - "in-latest-posix": "" - }, - "FE_DFL_MODE": { - "c-definition": "7.6.11" - }, - "FE_DOWNWARD": { - "c-definition": "7.6.13", - "in-latest-posix": "" - }, - "FE_TONEAREST": { - "c-definition": "7.6.13", - "in-latest-posix": "" - }, - "FE_TONEARESTFROMZERO": { - "c-definition": "7.6.13" - }, - "FE_TOWARDZERO": { - "c-definition": "7.6.13", - "in-latest-posix": "" - }, - "FE_UPWARD": { - "c-definition": "7.6.13", - "in-latest-posix": "" - }, - "FE_DEC_DOWNWARD": { - "c-definition": "7.6.14" - }, - "FE_DEC_TONEAREST": { - "c-definition": "7.6.14" - }, - "FE_DEC_TONEARESTFROMZERO": { - "c-definition": "7.6.14" - }, - "FE_DEC_TOWARDZERO": { - "c-definition": "7.6.14" - }, - "FE_DEC_UPWARD": { - "c-definition": "7.6.14" - }, - "FE_DFL_ENV": { - "c-definition": "7.6.17", - "in-latest-posix": "" - } - }, - "functions": { - "feclearexcept": { - "c-definition": "7.6.4.1", - "in-latest-posix": "" - }, - "fegetexceptflag": { - "c-definition": "7.6.4.2", - "in-latest-posix": "" - }, - "feraiseexcept": { - "c-definition": "7.6.4.3", - "in-latest-posix": "" - }, - "fesetexcept": { - "c-definition": "7.6.4.4" - }, - "fesetexceptflag": { - "c-definition": "7.6.4.5", - "in-latest-posix": "" - }, - "fetestexceptflag": { - "c-definition": "7.6.4.6" - }, - "fetestexcept": { - "c-definition": "7.6.4.7", - "in-latest-posix": "" - }, - "fegetmode": { - "c-definition": "7.6.5.1" - }, - "fegetround": { - "c-definition": "7.6.5.2", - "in-latest-posix": "" - }, - "fe_dec_getround": { - "c-definition": "7.6.5.3" - }, - "fesetmode": { - "c-definition": "7.6.5.4" - }, - "fesetround": { - "c-definition": "7.6.5.5", - "in-latest-posix": "" - }, - "fe_dec_setround": { - "c-definition": "7.6.5.6" - }, - "fegetenv": { - "c-definition": "7.6.6.1", - "in-latest-posix": "" - }, - "feholdexcept": { - "c-definition": "7.6.6.2", - "in-latest-posix": "" - }, - "fesetenv": { - "c-definition": "7.6.6.3", - "in-latest-posix": "" - }, - "feupdateenv": { - "c-definition": "7.6.6.4", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/fenv.yaml b/libc/utils/docgen/fenv.yaml new file mode 100644 index 000000000000..1d73697f36be --- /dev/null +++ b/libc/utils/docgen/fenv.yaml @@ -0,0 +1,97 @@ +functions: + fe_dec_getround: + c-definition: 7.6.5.3 + fe_dec_setround: + c-definition: 7.6.5.6 + feclearexcept: + c-definition: 7.6.4.1 + in-latest-posix: '' + fegetenv: + c-definition: 7.6.6.1 + in-latest-posix: '' + fegetexceptflag: + c-definition: 7.6.4.2 + in-latest-posix: '' + fegetmode: + c-definition: 7.6.5.1 + fegetround: + c-definition: 7.6.5.2 + in-latest-posix: '' + feholdexcept: + c-definition: 7.6.6.2 + in-latest-posix: '' + feraiseexcept: + c-definition: 7.6.4.3 + in-latest-posix: '' + fesetenv: + c-definition: 7.6.6.3 + in-latest-posix: '' + fesetexcept: + c-definition: 7.6.4.4 + fesetexceptflag: + c-definition: 7.6.4.5 + in-latest-posix: '' + fesetmode: + c-definition: 7.6.5.4 + fesetround: + c-definition: 7.6.5.5 + in-latest-posix: '' + fetestexcept: + c-definition: 7.6.4.7 + in-latest-posix: '' + fetestexceptflag: + c-definition: 7.6.4.6 + feupdateenv: + c-definition: 7.6.6.4 + in-latest-posix: '' +macros: + FE_ALL_EXCEPT: + c-definition: 7.6.12 + in-latest-posix: '' + FE_DEC_DOWNWARD: + c-definition: 7.6.14 + FE_DEC_TONEAREST: + c-definition: 7.6.14 + FE_DEC_TONEARESTFROMZERO: + c-definition: 7.6.14 + FE_DEC_TOWARDZERO: + c-definition: 7.6.14 + FE_DEC_UPWARD: + c-definition: 7.6.14 + FE_DFL_ENV: + c-definition: 7.6.17 + in-latest-posix: '' + FE_DFL_MODE: + c-definition: 7.6.11 + FE_DIVBYZERO: + c-definition: 7.6.9 + in-latest-posix: '' + FE_DOWNWARD: + c-definition: 7.6.13 + in-latest-posix: '' + FE_INEXACT: + c-definition: 7.6.9 + in-latest-posix: '' + FE_INVALID: + c-definition: 7.6.9 + in-latest-posix: '' + FE_OVERFLOW: + c-definition: 7.6.9 + in-latest-posix: '' + FE_TONEAREST: + c-definition: 7.6.13 + in-latest-posix: '' + FE_TONEARESTFROMZERO: + c-definition: 7.6.13 + FE_TOWARDZERO: + c-definition: 7.6.13 + in-latest-posix: '' + FE_UNDERFLOW: + c-definition: 7.6.9 + in-latest-posix: '' + FE_UPWARD: + c-definition: 7.6.13 + in-latest-posix: '' + __STDC_VERSION_FENV_H__: + c-definition: 7.6.5 + diff --git a/libc/utils/docgen/float.json b/libc/utils/docgen/float.json deleted file mode 100644 index 87746193b29d..000000000000 --- a/libc/utils/docgen/float.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_FLOAT_H__": { - "c-definition": "7.7" - }, - "FLT_EVAL_METHOD" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_ROUNDS" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_EVAL_METHOD" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_HAS_SUBNORM" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_HAS_SUBNORM" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_HAS_SUBNORM" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_RADIX" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MANT_DIG" : { - "c-definition": "5.3.5.3.3" - }, - "DBL_MANT_DIG" : { - "c-definition": "5.3.5.3.3" - }, - "LDBL_MANT_DIG" : { - "c-definition": "5.3.5.3.3" - }, - "FLT_DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DECIMAL_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_IS_IEC_60559" : { - "c-definition": "5.3.5.3.3" - }, - "DBL_IS_IEC_60559" : { - "c-definition": "5.3.5.3.3" - }, - "LDBL_IS_IEC_60559" : { - "c-definition": "5.3.5.3.3" - }, - "FLT_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_DIG" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MIN_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_MIN_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_MIN_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MIN_10_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_MIN_10_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_MIN_10_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MAX_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_MAX_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_MAX_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MAX_10_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_MAX_10_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_MAX_10_EXP" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MAX" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_MAX" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_MAX" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_NORM_MAX" : { - "c-definition": "5.3.5.3.3" - }, - "DBL_NORM_MAX" : { - "c-definition": "5.3.5.3.3" - }, - "LDBL_NORM_MAX" : { - "c-definition": "5.3.5.3.3" - }, - "FLT_EPSILON" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_EPSILON" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_EPSILON" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_MIN" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_MIN" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_MIN" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "FLT_SNAN" : { - "c-definition": "5.3.5.3.3" - }, - "DBL_SNAN" : { - "c-definition": "5.3.5.3.3" - }, - "LDBL_SNAN" : { - "c-definition": "5.3.5.3.3" - }, - "FLT_TRUE_MIN" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "DBL_TRUE_MIN" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "LDBL_TRUE_MIN" : { - "c-definition": "5.3.5.3.3", - "in-latest-posix": "" - }, - "INFINITY" : { - "c-definition": "5.3.5.3.3" - }, - "NAN" : { - "c-definition": "5.3.5.3.3" - } - } -} diff --git a/libc/utils/docgen/float.yaml b/libc/utils/docgen/float.yaml new file mode 100644 index 000000000000..a8840b91be55 --- /dev/null +++ b/libc/utils/docgen/float.yaml @@ -0,0 +1,143 @@ +macros: + DBL_DECIMAL_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_EPSILON: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_HAS_SUBNORM: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_IS_IEC_60559: + c-definition: 5.3.5.3.3 + DBL_MANT_DIG: + c-definition: 5.3.5.3.3 + DBL_MAX: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_MAX_10_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_MAX_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_MIN: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_MIN_10_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_MIN_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DBL_NORM_MAX: + c-definition: 5.3.5.3.3 + DBL_SNAN: + c-definition: 5.3.5.3.3 + DBL_TRUE_MIN: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + DECIMAL_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_DECIMAL_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_EPSILON: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_EVAL_METHOD: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_HAS_SUBNORM: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_IS_IEC_60559: + c-definition: 5.3.5.3.3 + FLT_MANT_DIG: + c-definition: 5.3.5.3.3 + FLT_MAX: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_MAX_10_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_MAX_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_MIN: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_MIN_10_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_MIN_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_NORM_MAX: + c-definition: 5.3.5.3.3 + FLT_RADIX: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_ROUNDS: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + FLT_SNAN: + c-definition: 5.3.5.3.3 + FLT_TRUE_MIN: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + INFINITY: + c-definition: 5.3.5.3.3 + LDBL_DECIMAL_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_DIG: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_EPSILON: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_HAS_SUBNORM: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_IS_IEC_60559: + c-definition: 5.3.5.3.3 + LDBL_MANT_DIG: + c-definition: 5.3.5.3.3 + LDBL_MAX: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_MAX_10_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_MAX_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_MIN: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_MIN_10_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_MIN_EXP: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + LDBL_NORM_MAX: + c-definition: 5.3.5.3.3 + LDBL_SNAN: + c-definition: 5.3.5.3.3 + LDBL_TRUE_MIN: + c-definition: 5.3.5.3.3 + in-latest-posix: '' + NAN: + c-definition: 5.3.5.3.3 + __STDC_VERSION_FLOAT_H__: + c-definition: '7.7' + diff --git a/libc/utils/docgen/header.py b/libc/utils/docgen/header.py index 7728a0f1d5b4..5bf524a64b69 100644 --- a/libc/utils/docgen/header.py +++ b/libc/utils/docgen/header.py @@ -14,7 +14,7 @@ class Header: Maintains implementation information about a standard header file: * where does its implementation dir live * where is its macros file - * where is its docgen json file + * where is its docgen yaml file By convention, the macro-only part of a header file is in a header-specific file somewhere in the directory tree with root at @@ -42,7 +42,7 @@ class Header: self.stem = header_name.rstrip(".h") self.docgen_root = Path(__file__).parent self.libc_root = self.docgen_root.parent.parent - self.docgen_json = self.docgen_root / Path(header_name).with_suffix(".json") + self.docgen_yaml = self.docgen_root / Path(header_name).with_suffix(".yaml") self.fns_dir = Path(self.libc_root, "src", self.stem) self.macros_dir = Path(self.libc_root, "include", "llvm-libc-macros") diff --git a/libc/utils/docgen/inttypes.json b/libc/utils/docgen/inttypes.json deleted file mode 100644 index 4c20d3d5cf3c..000000000000 --- a/libc/utils/docgen/inttypes.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "functions": { - "imaxabs": { - "c-definition": "7.8.2.1", - "in-latest-posix": "" - }, - "imaxdiv": { - "c-definition": "7.8.2.2", - "in-latest-posix": "" - }, - "strtoimax": { - "c-definition": "7.8.2.3", - "in-latest-posix": "" - }, - "strtoumax": { - "c-definition": "7.8.2.3", - "in-latest-posix": "" - }, - "wcstoimax": { - "c-definition": "7.8.2.4", - "in-latest-posix": "" - }, - "wcstoumax": { - "c-definition": "7.8.2.4", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/inttypes.yaml b/libc/utils/docgen/inttypes.yaml new file mode 100644 index 000000000000..cbf50592ef07 --- /dev/null +++ b/libc/utils/docgen/inttypes.yaml @@ -0,0 +1,20 @@ +functions: + imaxabs: + c-definition: 7.8.2.1 + in-latest-posix: '' + imaxdiv: + c-definition: 7.8.2.2 + in-latest-posix: '' + strtoimax: + c-definition: 7.8.2.3 + in-latest-posix: '' + strtoumax: + c-definition: 7.8.2.3 + in-latest-posix: '' + wcstoimax: + c-definition: 7.8.2.4 + in-latest-posix: '' + wcstoumax: + c-definition: 7.8.2.4 + in-latest-posix: '' + diff --git a/libc/utils/docgen/locale.json b/libc/utils/docgen/locale.json deleted file mode 100644 index 9af8156f5467..000000000000 --- a/libc/utils/docgen/locale.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "macros": { - "LC_ALL": { - "c-definition": "7.11", - "in-latest-posix": "" - }, - "LC_COLLATE": { - "c-definition": "7.11", - "in-latest-posix": "" - }, - "LC_CTYPE": { - "c-definition": "7.11", - "in-latest-posix": "" - }, - "LC_MONETARY": { - "c-definition": "7.11", - "in-latest-posix": "" - }, - "LC_NUMERIC": { - "c-definition": "7.11", - "in-latest-posix": "" - }, - "LC_TIME": { - "c-definition": "7.11", - "in-latest-posix": "" - } - }, - "functions": { - "setlocale": { - "c-definition": "7.11.1.1", - "in-latest-posix": "" - }, - "localeconv": { - "c-definition": "7.11.2.1", - "in-latest-posix": "" - }, - "duplocale": { - "in-latest-posix": "" - }, - "freelocale": { - "in-latest-posix": "" - }, - "getlocalename_l": { - "in-latest-posix": "" - }, - "newlocale": { - "in-latest-posix": "" - }, - "uselocale": { - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/locale.yaml b/libc/utils/docgen/locale.yaml new file mode 100644 index 000000000000..eea91a885ff4 --- /dev/null +++ b/libc/utils/docgen/locale.yaml @@ -0,0 +1,37 @@ +functions: + duplocale: + in-latest-posix: '' + freelocale: + in-latest-posix: '' + getlocalename_l: + in-latest-posix: '' + localeconv: + c-definition: 7.11.2.1 + in-latest-posix: '' + newlocale: + in-latest-posix: '' + setlocale: + c-definition: 7.11.1.1 + in-latest-posix: '' + uselocale: + in-latest-posix: '' +macros: + LC_ALL: + c-definition: '7.11' + in-latest-posix: '' + LC_COLLATE: + c-definition: '7.11' + in-latest-posix: '' + LC_CTYPE: + c-definition: '7.11' + in-latest-posix: '' + LC_MONETARY: + c-definition: '7.11' + in-latest-posix: '' + LC_NUMERIC: + c-definition: '7.11' + in-latest-posix: '' + LC_TIME: + c-definition: '7.11' + in-latest-posix: '' + diff --git a/libc/utils/docgen/setjmp.json b/libc/utils/docgen/setjmp.json deleted file mode 100644 index 22bc81b223fa..000000000000 --- a/libc/utils/docgen/setjmp.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_SETJMP_H__": { - "c-definition": "7.13.2" - } - }, - "functions": { - "setjmp": { - "c-definition": "7.13.1.1", - "in-latest-posix": "" - }, - "longjmp": { - "c-definition": "7.13.2.1", - "in-latest-posix": "" - }, - "sigsetjmp": { - "in-latest-posix": "" - }, - "siglongjmp": { - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/setjmp.yaml b/libc/utils/docgen/setjmp.yaml new file mode 100644 index 000000000000..123739d1a6ce --- /dev/null +++ b/libc/utils/docgen/setjmp.yaml @@ -0,0 +1,15 @@ +functions: + longjmp: + c-definition: 7.13.2.1 + in-latest-posix: '' + setjmp: + c-definition: 7.13.1.1 + in-latest-posix: '' + siglongjmp: + in-latest-posix: '' + sigsetjmp: + in-latest-posix: '' +macros: + __STDC_VERSION_SETJMP_H__: + c-definition: 7.13.2 + diff --git a/libc/utils/docgen/signal.json b/libc/utils/docgen/signal.json deleted file mode 100644 index 1a8bd94268db..000000000000 --- a/libc/utils/docgen/signal.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "macros": { - "SIG_DFL": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIG_ERR": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIG_HOLD": { - "in-latest-posix": "" - }, - "SIG_IGN": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGRTMIN": { - "in-latest-posix": "" - }, - "SIGRTMAX": { - "in-latest-posix": "" - }, - "SIGABRT": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGALRM": { - "in-latest-posix": "" - }, - "SIGBUS": { - "in-latest-posix": "" - }, - "SIGCHLD": { - "in-latest-posix": "" - }, - "SIGCONT": { - "in-latest-posix": "" - }, - "SIGFPE": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGHUP": { - "in-latest-posix": "" - }, - "SIGILL": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGINT": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGKILL": { - "in-latest-posix": "" - }, - "SIGPIPE": { - "in-latest-posix": "" - }, - "SIGPIPE": { - "in-latest-posix": "" - }, - "SIGQUIT": { - "in-latest-posix": "" - }, - "SIGSEGV": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGSTOP": { - "in-latest-posix": "" - }, - "SIGTERM": { - "c-definition": "7.14.3", - "in-latest-posix": "" - }, - "SIGTSTP": { - "in-latest-posix": "" - }, - "SIGTTIN": { - "in-latest-posix": "" - }, - "SIGTTOU": { - "in-latest-posix": "" - }, - "SIGUSR1": { - "in-latest-posix": "" - }, - "SIGUSR2": { - "in-latest-posix": "" - }, - "SIGPOLL": { - "in-latest-posix": "" - }, - "SIGPROF": { - "in-latest-posix": "" - }, - "SIGSYS": { - "in-latest-posix": "" - }, - "SIGTRAP": { - "in-latest-posix": "" - }, - "SIGURG": { - "in-latest-posix": "" - }, - "SIGVTALRM": { - "in-latest-posix": "" - }, - "SIGXCPU": { - "in-latest-posix": "" - }, - "SIGXFSZ": { - "in-latest-posix": "" - } - }, - "functions": { - "signal": { - "c-definition": "7.14.1.1", - "in-latest-posix": "" - }, - "raise": { - "c-definition": "7.14.2.1", - "in-latest-posix": "" - }, - "kill": { - "in-latest-posix": "" - }, - "sigaction": { - "in-latest-posix": "" - }, - "sigaddset": { - "in-latest-posix": "" - }, - "sigaltstack": { - "in-latest-posix": "" - }, - "sigdelset": { - "in-latest-posix": "" - }, - "sigemptyset": { - "in-latest-posix": "" - }, - "sigfillset": { - "in-latest-posix": "" - }, - "sigprocmask": { - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/signal.yaml b/libc/utils/docgen/signal.yaml new file mode 100644 index 000000000000..da31a86b00eb --- /dev/null +++ b/libc/utils/docgen/signal.yaml @@ -0,0 +1,102 @@ +functions: + kill: + in-latest-posix: '' + raise: + c-definition: 7.14.2.1 + in-latest-posix: '' + sigaction: + in-latest-posix: '' + sigaddset: + in-latest-posix: '' + sigaltstack: + in-latest-posix: '' + sigdelset: + in-latest-posix: '' + sigemptyset: + in-latest-posix: '' + sigfillset: + in-latest-posix: '' + signal: + c-definition: 7.14.1.1 + in-latest-posix: '' + sigprocmask: + in-latest-posix: '' +macros: + SIGABRT: + c-definition: 7.14.3 + in-latest-posix: '' + SIGALRM: + in-latest-posix: '' + SIGBUS: + in-latest-posix: '' + SIGCHLD: + in-latest-posix: '' + SIGCONT: + in-latest-posix: '' + SIGFPE: + c-definition: 7.14.3 + in-latest-posix: '' + SIGHUP: + in-latest-posix: '' + SIGILL: + c-definition: 7.14.3 + in-latest-posix: '' + SIGINT: + c-definition: 7.14.3 + in-latest-posix: '' + SIGKILL: + in-latest-posix: '' + SIGPIPE: + in-latest-posix: '' + SIGPOLL: + in-latest-posix: '' + SIGPROF: + in-latest-posix: '' + SIGQUIT: + in-latest-posix: '' + SIGRTMAX: + in-latest-posix: '' + SIGRTMIN: + in-latest-posix: '' + SIGSEGV: + c-definition: 7.14.3 + in-latest-posix: '' + SIGSTOP: + in-latest-posix: '' + SIGSYS: + in-latest-posix: '' + SIGTERM: + c-definition: 7.14.3 + in-latest-posix: '' + SIGTRAP: + in-latest-posix: '' + SIGTSTP: + in-latest-posix: '' + SIGTTIN: + in-latest-posix: '' + SIGTTOU: + in-latest-posix: '' + SIGURG: + in-latest-posix: '' + SIGUSR1: + in-latest-posix: '' + SIGUSR2: + in-latest-posix: '' + SIGVTALRM: + in-latest-posix: '' + SIGXCPU: + in-latest-posix: '' + SIGXFSZ: + in-latest-posix: '' + SIG_DFL: + c-definition: 7.14.3 + in-latest-posix: '' + SIG_ERR: + c-definition: 7.14.3 + in-latest-posix: '' + SIG_HOLD: + in-latest-posix: '' + SIG_IGN: + c-definition: 7.14.3 + in-latest-posix: '' + diff --git a/libc/utils/docgen/stdbit.json b/libc/utils/docgen/stdbit.json deleted file mode 100644 index 25060c1ff9fd..000000000000 --- a/libc/utils/docgen/stdbit.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_STDBIT_H__": { - "c-definition": "7.18.1.2" - }, - "__STDC_ENDIAN_LITTLE__": { - "c-definition": "7.18.2.2" - }, - "__STDC_ENDIAN_BIG__": { - "c-definition": "7.18.2.2" - }, - "__STDC_ENDIAN_NATIVE__": { - "c-definition": "7.18.2.2" - }, - "stdc_leading_zeros": { - "c-definition": "7.18.3.1" - }, - "stdc_leading_ones": { - "c-definition": "7.18.4.1" - }, - "stdc_trailing_zeros": { - "c-definition": "7.18.5.1" - }, - "stdc_trailing_ones": { - "c-definition": "7.18.6.1" - }, - "stdc_first_leading_zero": { - "c-definition": "7.18.7.1" - }, - "stdc_first_leading_one": { - "c-definition": "7.18.8.1" - }, - "stdc_first_trailing_zero": { - "c-definition": "7.18.9.1" - }, - "stdc_first_trailing_one": { - "c-definition": "7.18.10.1" - }, - "stdc_count_zeros": { - "c-definition": "7.18.11.1" - }, - "stdc_count_ones": { - "c-definition": "7.18.12.1" - }, - "stdc_has_single_bit": { - "c-definition": "7.18.13.1" - }, - "stdc_bit_width": { - "c-definition": "7.18.14.1" - }, - "stdc_bit_floor": { - "c-definition": "7.18.15.1" - }, - "stdc_bit_ceil": { - "c-definition": "7.18.16.1" - } - }, - "functions": { - "stdc_leading_zeros_uc": { - "c-definition": "7.18.3" - }, - "stdc_leading_zeros_us": { - "c-definition": "7.18.3" - }, - "stdc_leading_zeros_ui": { - "c-definition": "7.18.3" - }, - "stdc_leading_zeros_ul": { - "c-definition": "7.18.3" - }, - "stdc_leading_zeros_ull": { - "c-definition": "7.18.3" - }, - "stdc_leading_ones_uc": { - "c-definition": "7.18.4" - }, - "stdc_leading_ones_us": { - "c-definition": "7.18.4" - }, - "stdc_leading_ones_ui": { - "c-definition": "7.18.4" - }, - "stdc_leading_ones_ul": { - "c-definition": "7.18.4" - }, - "stdc_leading_ones_ull": { - "c-definition": "7.18.4" - }, - "stdc_trailing_zeros_uc": { - "c-definition": "7.18.5" - }, - "stdc_trailing_zeros_us": { - "c-definition": "7.18.5" - }, - "stdc_trailing_zeros_ui": { - "c-definition": "7.18.5" - }, - "stdc_trailing_zeros_ul": { - "c-definition": "7.18.5" - }, - "stdc_trailing_zeros_ull": { - "c-definition": "7.18.5" - }, - "stdc_trailing_ones_uc": { - "c-definition": "7.18.6" - }, - "stdc_trailing_ones_us": { - "c-definition": "7.18.6" - }, - "stdc_trailing_ones_ui": { - "c-definition": "7.18.6" - }, - "stdc_trailing_ones_ul": { - "c-definition": "7.18.6" - }, - "stdc_trailing_ones_ull": { - "c-definition": "7.18.6" - }, - "stdc_first_leading_zero_uc": { - "c-definition": "7.18.7" - }, - "stdc_first_leading_zero_us": { - "c-definition": "7.18.7" - }, - "stdc_first_leading_zero_ui": { - "c-definition": "7.18.7" - }, - "stdc_first_leading_zero_ul": { - "c-definition": "7.18.7" - }, - "stdc_first_leading_zero_ull": { - "c-definition": "7.18.7" - }, - "stdc_first_leading_one_uc": { - "c-definition": "7.18.8" - }, - "stdc_first_leading_one_us": { - "c-definition": "7.18.8" - }, - "stdc_first_leading_one_ui": { - "c-definition": "7.18.8" - }, - "stdc_first_leading_one_ul": { - "c-definition": "7.18.8" - }, - "stdc_first_leading_one_ull": { - "c-definition": "7.18.8" - }, - "stdc_first_trailing_zero_uc": { - "c-definition": "7.18.9" - }, - "stdc_first_trailing_zero_us": { - "c-definition": "7.18.9" - }, - "stdc_first_trailing_zero_ui": { - "c-definition": "7.18.9" - }, - "stdc_first_trailing_zero_ul": { - "c-definition": "7.18.9" - }, - "stdc_first_trailing_zero_ull": { - "c-definition": "7.18.9" - }, - "stdc_first_trailing_one_uc": { - "c-definition": "7.18.10" - }, - "stdc_first_trailing_one_us": { - "c-definition": "7.18.10" - }, - "stdc_first_trailing_one_ui": { - "c-definition": "7.18.10" - }, - "stdc_first_trailing_one_ul": { - "c-definition": "7.18.10" - }, - "stdc_first_trailing_one_ull": { - "c-definition": "7.18.10" - }, - "stdc_count_zeros_uc": { - "c-definition": "7.18.11" - }, - "stdc_count_zeros_us": { - "c-definition": "7.18.11" - }, - "stdc_count_zeros_ui": { - "c-definition": "7.18.11" - }, - "stdc_count_zeros_ul": { - "c-definition": "7.18.11" - }, - "stdc_count_zeros_ull": { - "c-definition": "7.18.11" - }, - "stdc_count_ones_uc": { - "c-definition": "7.18.12" - }, - "stdc_count_ones_us": { - "c-definition": "7.18.12" - }, - "stdc_count_ones_ui": { - "c-definition": "7.18.12" - }, - "stdc_count_ones_ul": { - "c-definition": "7.18.12" - }, - "stdc_count_ones_ull": { - "c-definition": "7.18.12" - }, - "stdc_has_single_bit_uc": { - "c-definition": "7.18.13" - }, - "stdc_has_single_bit_us": { - "c-definition": "7.18.13" - }, - "stdc_has_single_bit_ui": { - "c-definition": "7.18.13" - }, - "stdc_has_single_bit_ul": { - "c-definition": "7.18.13" - }, - "stdc_has_single_bit_ull": { - "c-definition": "7.18.13" - }, - "stdc_bit_width_uc": { - "c-definition": "7.18.14" - }, - "stdc_bit_width_us": { - "c-definition": "7.18.14" - }, - "stdc_bit_width_ui": { - "c-definition": "7.18.14" - }, - "stdc_bit_width_ul": { - "c-definition": "7.18.14" - }, - "stdc_bit_width_ull": { - "c-definition": "7.18.14" - }, - "stdc_bit_floor_uc": { - "c-definition": "7.18.15" - }, - "stdc_bit_floor_us": { - "c-definition": "7.18.15" - }, - "stdc_bit_floor_ui": { - "c-definition": "7.18.15" - }, - "stdc_bit_floor_ul": { - "c-definition": "7.18.15" - }, - "stdc_bit_floor_ull": { - "c-definition": "7.18.15" - }, - "stdc_bit_ceil_uc": { - "c-definition": "7.18.16" - }, - "stdc_bit_ceil_us": { - "c-definition": "7.18.16" - }, - "stdc_bit_ceil_ui": { - "c-definition": "7.18.16" - }, - "stdc_bit_ceil_ul": { - "c-definition": "7.18.16" - }, - "stdc_bit_ceil_ull": { - "c-definition": "7.18.16" - } - } -} diff --git a/libc/utils/docgen/stdbit.yaml b/libc/utils/docgen/stdbit.yaml new file mode 100644 index 000000000000..976221601e9c --- /dev/null +++ b/libc/utils/docgen/stdbit.yaml @@ -0,0 +1,179 @@ +functions: + stdc_bit_ceil_uc: + c-definition: 7.18.16 + stdc_bit_ceil_ui: + c-definition: 7.18.16 + stdc_bit_ceil_ul: + c-definition: 7.18.16 + stdc_bit_ceil_ull: + c-definition: 7.18.16 + stdc_bit_ceil_us: + c-definition: 7.18.16 + stdc_bit_floor_uc: + c-definition: 7.18.15 + stdc_bit_floor_ui: + c-definition: 7.18.15 + stdc_bit_floor_ul: + c-definition: 7.18.15 + stdc_bit_floor_ull: + c-definition: 7.18.15 + stdc_bit_floor_us: + c-definition: 7.18.15 + stdc_bit_width_uc: + c-definition: 7.18.14 + stdc_bit_width_ui: + c-definition: 7.18.14 + stdc_bit_width_ul: + c-definition: 7.18.14 + stdc_bit_width_ull: + c-definition: 7.18.14 + stdc_bit_width_us: + c-definition: 7.18.14 + stdc_count_ones_uc: + c-definition: 7.18.12 + stdc_count_ones_ui: + c-definition: 7.18.12 + stdc_count_ones_ul: + c-definition: 7.18.12 + stdc_count_ones_ull: + c-definition: 7.18.12 + stdc_count_ones_us: + c-definition: 7.18.12 + stdc_count_zeros_uc: + c-definition: 7.18.11 + stdc_count_zeros_ui: + c-definition: 7.18.11 + stdc_count_zeros_ul: + c-definition: 7.18.11 + stdc_count_zeros_ull: + c-definition: 7.18.11 + stdc_count_zeros_us: + c-definition: 7.18.11 + stdc_first_leading_one_uc: + c-definition: 7.18.8 + stdc_first_leading_one_ui: + c-definition: 7.18.8 + stdc_first_leading_one_ul: + c-definition: 7.18.8 + stdc_first_leading_one_ull: + c-definition: 7.18.8 + stdc_first_leading_one_us: + c-definition: 7.18.8 + stdc_first_leading_zero_uc: + c-definition: 7.18.7 + stdc_first_leading_zero_ui: + c-definition: 7.18.7 + stdc_first_leading_zero_ul: + c-definition: 7.18.7 + stdc_first_leading_zero_ull: + c-definition: 7.18.7 + stdc_first_leading_zero_us: + c-definition: 7.18.7 + stdc_first_trailing_one_uc: + c-definition: 7.18.10 + stdc_first_trailing_one_ui: + c-definition: 7.18.10 + stdc_first_trailing_one_ul: + c-definition: 7.18.10 + stdc_first_trailing_one_ull: + c-definition: 7.18.10 + stdc_first_trailing_one_us: + c-definition: 7.18.10 + stdc_first_trailing_zero_uc: + c-definition: 7.18.9 + stdc_first_trailing_zero_ui: + c-definition: 7.18.9 + stdc_first_trailing_zero_ul: + c-definition: 7.18.9 + stdc_first_trailing_zero_ull: + c-definition: 7.18.9 + stdc_first_trailing_zero_us: + c-definition: 7.18.9 + stdc_has_single_bit_uc: + c-definition: 7.18.13 + stdc_has_single_bit_ui: + c-definition: 7.18.13 + stdc_has_single_bit_ul: + c-definition: 7.18.13 + stdc_has_single_bit_ull: + c-definition: 7.18.13 + stdc_has_single_bit_us: + c-definition: 7.18.13 + stdc_leading_ones_uc: + c-definition: 7.18.4 + stdc_leading_ones_ui: + c-definition: 7.18.4 + stdc_leading_ones_ul: + c-definition: 7.18.4 + stdc_leading_ones_ull: + c-definition: 7.18.4 + stdc_leading_ones_us: + c-definition: 7.18.4 + stdc_leading_zeros_uc: + c-definition: 7.18.3 + stdc_leading_zeros_ui: + c-definition: 7.18.3 + stdc_leading_zeros_ul: + c-definition: 7.18.3 + stdc_leading_zeros_ull: + c-definition: 7.18.3 + stdc_leading_zeros_us: + c-definition: 7.18.3 + stdc_trailing_ones_uc: + c-definition: 7.18.6 + stdc_trailing_ones_ui: + c-definition: 7.18.6 + stdc_trailing_ones_ul: + c-definition: 7.18.6 + stdc_trailing_ones_ull: + c-definition: 7.18.6 + stdc_trailing_ones_us: + c-definition: 7.18.6 + stdc_trailing_zeros_uc: + c-definition: 7.18.5 + stdc_trailing_zeros_ui: + c-definition: 7.18.5 + stdc_trailing_zeros_ul: + c-definition: 7.18.5 + stdc_trailing_zeros_ull: + c-definition: 7.18.5 + stdc_trailing_zeros_us: + c-definition: 7.18.5 +macros: + __STDC_ENDIAN_BIG__: + c-definition: 7.18.2.2 + __STDC_ENDIAN_LITTLE__: + c-definition: 7.18.2.2 + __STDC_ENDIAN_NATIVE__: + c-definition: 7.18.2.2 + __STDC_VERSION_STDBIT_H__: + c-definition: 7.18.1.2 + stdc_bit_ceil: + c-definition: 7.18.16.1 + stdc_bit_floor: + c-definition: 7.18.15.1 + stdc_bit_width: + c-definition: 7.18.14.1 + stdc_count_ones: + c-definition: 7.18.12.1 + stdc_count_zeros: + c-definition: 7.18.11.1 + stdc_first_leading_one: + c-definition: 7.18.8.1 + stdc_first_leading_zero: + c-definition: 7.18.7.1 + stdc_first_trailing_one: + c-definition: 7.18.10.1 + stdc_first_trailing_zero: + c-definition: 7.18.9.1 + stdc_has_single_bit: + c-definition: 7.18.13.1 + stdc_leading_ones: + c-definition: 7.18.4.1 + stdc_leading_zeros: + c-definition: 7.18.3.1 + stdc_trailing_ones: + c-definition: 7.18.6.1 + stdc_trailing_zeros: + c-definition: 7.18.5.1 + diff --git a/libc/utils/docgen/stdlib.json b/libc/utils/docgen/stdlib.json deleted file mode 100644 index cd8706471d76..000000000000 --- a/libc/utils/docgen/stdlib.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_STDLIB_H__": { - "c-definition": "7.24" - }, - "EXIT_FAILURE": { - "c-definition": "7.24", - "in-latest-posix": "" - }, - "EXIT_SUCCESS": { - "c-definition": "7.24", - "in-latest-posix": "" - }, - "RAND_MAX": { - "c-definition": "7.24", - "in-latest-posix": "" - }, - "MB_CUR_MAX": { - "c-definition": "7.24", - "in-latest-posix": "" - } - }, - "functions": { - "atof": { - "c-definition": "7.24.1.1", - "in-latest-posix": "" - }, - "atoi": { - "c-definition": "7.24.1.2", - "in-latest-posix": "" - }, - "atol": { - "c-definition": "7.24.1.2", - "in-latest-posix": "" - }, - "atoll": { - "c-definition": "7.24.1.2", - "in-latest-posix": "" - }, - "strfromd": { - "c-definition": "7.24.1.3" - }, - "strfromf": { - "c-definition": "7.24.1.3" - }, - "strfroml": { - "c-definition": "7.24.1.3" - }, - "strfromd32": { - "c-definition": "7.24.1.4" - }, - "strfromd64": { - "c-definition": "7.24.1.4" - }, - "strfromd128": { - "c-definition": "7.24.1.4" - }, - "strtod": { - "c-definition": "7.24.1.5", - "in-latest-posix": "" - }, - "strtof": { - "c-definition": "7.24.1.5", - "in-latest-posix": "" - }, - "strtold": { - "c-definition": "7.24.1.5", - "in-latest-posix": "" - }, - "strtod32": { - "c-definition": "7.24.1.6" - }, - "strtod64": { - "c-definition": "7.24.1.6" - }, - "strtod128": { - "c-definition": "7.24.1.6" - }, - "strtol": { - "c-definition": "7.24.1.7", - "in-latest-posix": "" - }, - "strtoll": { - "c-definition": "7.24.1.7", - "in-latest-posix": "" - }, - "strtoul": { - "c-definition": "7.24.1.7", - "in-latest-posix": "" - }, - "strtoull": { - "c-definition": "7.24.1.7", - "in-latest-posix": "" - }, - "rand": { - "c-definition": "7.24.2.1", - "in-latest-posix": "" - }, - "srand": { - "c-definition": "7.24.2.2", - "in-latest-posix": "" - }, - "aligned_alloc": { - "c-definition": "7.24.3.1", - "in-latest-posix": "" - }, - "calloc": { - "c-definition": "7.24.3.2", - "in-latest-posix": "" - }, - "free": { - "c-definition": "7.24.3.3", - "in-latest-posix": "" - }, - "free_sized": { - "c-definition": "7.24.3.4" - }, - "free_aligned_sized": { - "c-definition": "7.24.3.5" - }, - "malloc": { - "c-definition": "7.24.3.6", - "in-latest-posix": "" - }, - "realloc": { - "c-definition": "7.24.3.7", - "in-latest-posix": "" - }, - "abort": { - "c-definition": "7.24.4.1", - "in-latest-posix": "" - }, - "atexit": { - "c-definition": "7.24.4.2", - "in-latest-posix": "" - }, - "at_quick_exit": { - "c-definition": "7.24.4.3", - "in-latest-posix": "" - }, - "exit": { - "c-definition": "7.24.4.4", - "in-latest-posix": "" - }, - "_Exit": { - "c-definition": "7.24.4.5", - "in-latest-posix": "" - }, - "getenv": { - "c-definition": "7.24.4.6", - "in-latest-posix": "" - }, - "quick_exit": { - "c-definition": "7.24.4.7", - "in-latest-posix": "" - }, - "system": { - "c-definition": "7.24.4.8", - "in-latest-posix": "" - }, - "bsearch": { - "c-definition": "7.24.5.1", - "in-latest-posix": "" - }, - "qsort": { - "c-definition": "7.24.5.2", - "in-latest-posix": "" - }, - "abs": { - "c-definition": "7.24.6.1", - "in-latest-posix": "" - }, - "labs": { - "c-definition": "7.24.6.1", - "in-latest-posix": "" - }, - "llabs": { - "c-definition": "7.24.6.1", - "in-latest-posix": "" - }, - "div": { - "c-definition": "7.24.6.2", - "in-latest-posix": "" - }, - "ldiv": { - "c-definition": "7.24.6.2", - "in-latest-posix": "" - }, - "lldiv": { - "c-definition": "7.24.6.2", - "in-latest-posix": "" - }, - "mblen": { - "c-definition": "7.24.7.1", - "in-latest-posix": "" - }, - "mbtowc": { - "c-definition": "7.24.7.2", - "in-latest-posix": "" - }, - "wctomb": { - "c-definition": "7.24.7.3", - "in-latest-posix": "" - }, - "mbstowcs": { - "c-definition": "7.24.8.1", - "in-latest-posix": "" - }, - "wcstombs": { - "c-definition": "7.24.8.2", - "in-latest-posix": "" - }, - "memalignment": { - "c-definition": "7.24.9.1" - } - } -} diff --git a/libc/utils/docgen/stdlib.yaml b/libc/utils/docgen/stdlib.yaml new file mode 100644 index 000000000000..526ddefbe1ce --- /dev/null +++ b/libc/utils/docgen/stdlib.yaml @@ -0,0 +1,158 @@ +functions: + _Exit: + c-definition: 7.24.4.5 + in-latest-posix: '' + abort: + c-definition: 7.24.4.1 + in-latest-posix: '' + abs: + c-definition: 7.24.6.1 + in-latest-posix: '' + aligned_alloc: + c-definition: 7.24.3.1 + in-latest-posix: '' + at_quick_exit: + c-definition: 7.24.4.3 + in-latest-posix: '' + atexit: + c-definition: 7.24.4.2 + in-latest-posix: '' + atof: + c-definition: 7.24.1.1 + in-latest-posix: '' + atoi: + c-definition: 7.24.1.2 + in-latest-posix: '' + atol: + c-definition: 7.24.1.2 + in-latest-posix: '' + atoll: + c-definition: 7.24.1.2 + in-latest-posix: '' + bsearch: + c-definition: 7.24.5.1 + in-latest-posix: '' + calloc: + c-definition: 7.24.3.2 + in-latest-posix: '' + div: + c-definition: 7.24.6.2 + in-latest-posix: '' + exit: + c-definition: 7.24.4.4 + in-latest-posix: '' + free: + c-definition: 7.24.3.3 + in-latest-posix: '' + free_aligned_sized: + c-definition: 7.24.3.5 + free_sized: + c-definition: 7.24.3.4 + getenv: + c-definition: 7.24.4.6 + in-latest-posix: '' + labs: + c-definition: 7.24.6.1 + in-latest-posix: '' + ldiv: + c-definition: 7.24.6.2 + in-latest-posix: '' + llabs: + c-definition: 7.24.6.1 + in-latest-posix: '' + lldiv: + c-definition: 7.24.6.2 + in-latest-posix: '' + malloc: + c-definition: 7.24.3.6 + in-latest-posix: '' + mblen: + c-definition: 7.24.7.1 + in-latest-posix: '' + mbstowcs: + c-definition: 7.24.8.1 + in-latest-posix: '' + mbtowc: + c-definition: 7.24.7.2 + in-latest-posix: '' + memalignment: + c-definition: 7.24.9.1 + qsort: + c-definition: 7.24.5.2 + in-latest-posix: '' + quick_exit: + c-definition: 7.24.4.7 + in-latest-posix: '' + rand: + c-definition: 7.24.2.1 + in-latest-posix: '' + realloc: + c-definition: 7.24.3.7 + in-latest-posix: '' + srand: + c-definition: 7.24.2.2 + in-latest-posix: '' + strfromd: + c-definition: 7.24.1.3 + strfromd128: + c-definition: 7.24.1.4 + strfromd32: + c-definition: 7.24.1.4 + strfromd64: + c-definition: 7.24.1.4 + strfromf: + c-definition: 7.24.1.3 + strfroml: + c-definition: 7.24.1.3 + strtod: + c-definition: 7.24.1.5 + in-latest-posix: '' + strtod128: + c-definition: 7.24.1.6 + strtod32: + c-definition: 7.24.1.6 + strtod64: + c-definition: 7.24.1.6 + strtof: + c-definition: 7.24.1.5 + in-latest-posix: '' + strtol: + c-definition: 7.24.1.7 + in-latest-posix: '' + strtold: + c-definition: 7.24.1.5 + in-latest-posix: '' + strtoll: + c-definition: 7.24.1.7 + in-latest-posix: '' + strtoul: + c-definition: 7.24.1.7 + in-latest-posix: '' + strtoull: + c-definition: 7.24.1.7 + in-latest-posix: '' + system: + c-definition: 7.24.4.8 + in-latest-posix: '' + wcstombs: + c-definition: 7.24.8.2 + in-latest-posix: '' + wctomb: + c-definition: 7.24.7.3 + in-latest-posix: '' +macros: + EXIT_FAILURE: + c-definition: '7.24' + in-latest-posix: '' + EXIT_SUCCESS: + c-definition: '7.24' + in-latest-posix: '' + MB_CUR_MAX: + c-definition: '7.24' + in-latest-posix: '' + RAND_MAX: + c-definition: '7.24' + in-latest-posix: '' + __STDC_VERSION_STDLIB_H__: + c-definition: '7.24' + diff --git a/libc/utils/docgen/string.json b/libc/utils/docgen/string.json deleted file mode 100644 index f31c8e8b8126..000000000000 --- a/libc/utils/docgen/string.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_STRING_H__": { - "c-definition": "7.26.1" - } - }, - "functions": { - "memcpy": { - "c-definition": "7.26.2.1", - "in-latest-posix": "" - }, - "memccpy": { - "c-definition": "7.26.2.2", - "in-latest-posix": "" - }, - "mempcpy": { - "c-definition": "TODO: glibc extension" - }, - "memmove": { - "c-definition": "7.26.2.3", - "in-latest-posix": "" - }, - "strcpy": { - "c-definition": "7.26.2.4", - "in-latest-posix": "" - }, - "strncpy": { - "c-definition": "7.26.2.5", - "in-latest-posix": "" - }, - "stpcpy": { - "in-latest-posix": "" - }, - "stpncpy": { - "in-latest-posix": "" - }, - "strdup": { - "c-definition": "7.26.2.6", - "in-latest-posix": "" - }, - "strndup": { - "c-definition": "7.26.2.7", - "in-latest-posix": "" - }, - "strcat": { - "c-definition": "7.26.3.1", - "in-latest-posix": "" - }, - "strncat": { - "c-definition": "7.26.3.2", - "in-latest-posix": "" - }, - "memcmp": { - "c-definition": "7.26.4.1", - "in-latest-posix": "" - }, - "strcmp": { - "c-definition": "7.26.4.2", - "in-latest-posix": "" - }, - "strcoll": { - "c-definition": "7.26.4.3", - "in-latest-posix": "" - }, - "strcoll_l": { - "in-latest-posix": "" - }, - "strncmp": { - "c-definition": "7.26.4.4", - "in-latest-posix": "" - }, - "strxfrm": { - "c-definition": "7.26.4.5", - "in-latest-posix": "" - }, - "strxfrm_l": { - "in-latest-posix": "" - }, - "memchr": { - "c-definition": "7.26.5.2", - "in-latest-posix": "" - }, - "strchr": { - "c-definition": "7.26.5.3", - "in-latest-posix": "" - }, - "strcspn": { - "c-definition": "7.26.5.4", - "in-latest-posix": "" - }, - "strpbrk": { - "c-definition": "7.26.5.5", - "in-latest-posix": "" - }, - "strrchr": { - "c-definition": "7.26.5.6", - "in-latest-posix": "" - }, - "strspn": { - "c-definition": "7.26.5.7", - "in-latest-posix": "" - }, - "strstr": { - "c-definition": "7.26.5.8", - "in-latest-posix": "" - }, - "strtok": { - "c-definition": "7.26.5.9", - "in-latest-posix": "" - }, - "strtok_r": { - "in-latest-posix": "" - }, - "memset": { - "c-definition": "7.26.6.1", - "in-latest-posix": "" - }, - "memset_explicit": { - "c-definition": "7.26.6.2" - }, - "strerror": { - "c-definition": "7.26.6.3", - "in-latest-posix": "" - }, - "strlen": { - "c-definition": "7.26.6.4", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/string.yaml b/libc/utils/docgen/string.yaml new file mode 100644 index 000000000000..d703a8e3593e --- /dev/null +++ b/libc/utils/docgen/string.yaml @@ -0,0 +1,94 @@ +functions: + memccpy: + c-definition: 7.26.2.2 + in-latest-posix: '' + memchr: + c-definition: 7.26.5.2 + in-latest-posix: '' + memcmp: + c-definition: 7.26.4.1 + in-latest-posix: '' + memcpy: + c-definition: 7.26.2.1 + in-latest-posix: '' + memmove: + c-definition: 7.26.2.3 + in-latest-posix: '' + mempcpy: + c-definition: 'TODO: glibc extension' + memset: + c-definition: 7.26.6.1 + in-latest-posix: '' + memset_explicit: + c-definition: 7.26.6.2 + stpcpy: + in-latest-posix: '' + stpncpy: + in-latest-posix: '' + strcat: + c-definition: 7.26.3.1 + in-latest-posix: '' + strchr: + c-definition: 7.26.5.3 + in-latest-posix: '' + strcmp: + c-definition: 7.26.4.2 + in-latest-posix: '' + strcoll: + c-definition: 7.26.4.3 + in-latest-posix: '' + strcoll_l: + in-latest-posix: '' + strcpy: + c-definition: 7.26.2.4 + in-latest-posix: '' + strcspn: + c-definition: 7.26.5.4 + in-latest-posix: '' + strdup: + c-definition: 7.26.2.6 + in-latest-posix: '' + strerror: + c-definition: 7.26.6.3 + in-latest-posix: '' + strlen: + c-definition: 7.26.6.4 + in-latest-posix: '' + strncat: + c-definition: 7.26.3.2 + in-latest-posix: '' + strncmp: + c-definition: 7.26.4.4 + in-latest-posix: '' + strncpy: + c-definition: 7.26.2.5 + in-latest-posix: '' + strndup: + c-definition: 7.26.2.7 + in-latest-posix: '' + strpbrk: + c-definition: 7.26.5.5 + in-latest-posix: '' + strrchr: + c-definition: 7.26.5.6 + in-latest-posix: '' + strspn: + c-definition: 7.26.5.7 + in-latest-posix: '' + strstr: + c-definition: 7.26.5.8 + in-latest-posix: '' + strtok: + c-definition: 7.26.5.9 + in-latest-posix: '' + strtok_r: + in-latest-posix: '' + strxfrm: + c-definition: 7.26.4.5 + in-latest-posix: '' + strxfrm_l: + in-latest-posix: '' +macros: + __STDC_VERSION_STRING_H__: + c-definition: 7.26.1 + diff --git a/libc/utils/docgen/strings.json b/libc/utils/docgen/strings.json deleted file mode 100644 index c1c579a13dbd..000000000000 --- a/libc/utils/docgen/strings.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "functions": { - "bzero": { - "removed-in-posix-2008": "" - }, - "bcmp": { - "removed-in-posix-2008": "" - }, - "bcopy": { - "removed-in-posix-2008": "" - }, - "ffs": { - "in-latest-posix": "" - }, - "ffsl": { - "in-latest-posix": "" - }, - "ffsll": { - "in-latest-posix": "" - }, - "index": { - "removed-in-posix-2008": "" - }, - "rindex": { - "removed-in-posix-2008": "" - }, - "strcasecmp": { - "in-latest-posix": "" - }, - "strcasecmp_l": { - "in-latest-posix": "" - }, - "strncasecmp": { - "in-latest-posix": "" - }, - "strncasecmp_l": { - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/sys/mman.json b/libc/utils/docgen/sys/mman.json deleted file mode 100644 index 59f904fcfea9..000000000000 --- a/libc/utils/docgen/sys/mman.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "macros": { - "PROT_EXEC": { "posix-definition": "" }, - "PROT_NONE": { "posix-definition": "" }, - "PROT_READ": { "posix-definition": "" }, - "PROT_WRITE": { "posix-definition": "" }, - "MAP_ANON": { "posix-definition": "" }, - "MAP_ANONYMOUS": { "posix-definition": "" }, - "MAP_FIXED": { "posix-definition": "" }, - "MAP_PRIVATE": { "posix-definition": "" }, - "MAP_SHARED": { "posix-definition": "" }, - "MS_ASYNC": { "posix-definition": "" }, - "MS_INVALIDATE": { "posix-definition": "" }, - "MS_SYNC": { "posix-definition": "" }, - "MCL_CURRENT": { "posix-definition": "" }, - "MCL_FUTURE": { "posix-definition": "" }, - "MAP_FAILED": { "posix-definition": "" }, - "POSIX_MADV_DONTNEED": { "posix-definition": "" }, - "POSIX_MADV_NORMAL": { "posix-definition": "" }, - "POSIX_MADV_RANDOM": { "posix-definition": "" }, - "POSIX_MADV_SEQUENTIAL": { "posix-definition": "" }, - "POSIX_MADV_WILLNEED": { "posix-definition": "" }, - "POSIX_TYPED_MEM_ALLOCATE": { "posix-definition": "" }, - "POSIX_TYPED_MEM_ALLOCATE_CONTIG": { "posix-definition": "" }, - "POSIX_TYPED_MEM_MAP_ALLOCATABLE": { "posix-definition": "" } - }, - "functions": { - "mlock": { "posix-definition": "" }, - "mlockall": { "posix-definition": "" }, - "mmap": { "posix-definition": "" }, - "mprotect": { "posix-definition": "" }, - "msync": { "posix-definition": "" }, - "munlock": { "posix-definition": "" }, - "munlockall": { "posix-definition": "" }, - "munmap": { "posix-definition": "" }, - "posix_madvise": { "posix-definition": "" }, - "posix_mem_offset": { "posix-definition": "" }, - "posix_typed_mem_get_info": { "posix-definition": "" }, - "posix_typed_mem_open": { "posix-definition": "" }, - "shm_open": { "posix-definition": "" }, - "shm_unlink": { "posix-definition": "" } - } -} diff --git a/libc/utils/docgen/sys/mman.yaml b/libc/utils/docgen/sys/mman.yaml new file mode 100644 index 000000000000..dba26cabc662 --- /dev/null +++ b/libc/utils/docgen/sys/mman.yaml @@ -0,0 +1,77 @@ +functions: + mlock: + posix-definition: '' + mlockall: + posix-definition: '' + mmap: + posix-definition: '' + mprotect: + posix-definition: '' + msync: + posix-definition: '' + munlock: + posix-definition: '' + munlockall: + posix-definition: '' + munmap: + posix-definition: '' + posix_madvise: + posix-definition: '' + posix_mem_offset: + posix-definition: '' + posix_typed_mem_get_info: + posix-definition: '' + posix_typed_mem_open: + posix-definition: '' + shm_open: + posix-definition: '' + shm_unlink: + posix-definition: '' +macros: + MAP_ANON: + posix-definition: '' + MAP_ANONYMOUS: + posix-definition: '' + MAP_FAILED: + posix-definition: '' + MAP_FIXED: + posix-definition: '' + MAP_PRIVATE: + posix-definition: '' + MAP_SHARED: + posix-definition: '' + MCL_CURRENT: + posix-definition: '' + MCL_FUTURE: + posix-definition: '' + MS_ASYNC: + posix-definition: '' + MS_INVALIDATE: + posix-definition: '' + MS_SYNC: + posix-definition: '' + POSIX_MADV_DONTNEED: + posix-definition: '' + POSIX_MADV_NORMAL: + posix-definition: '' + POSIX_MADV_RANDOM: + posix-definition: '' + POSIX_MADV_SEQUENTIAL: + posix-definition: '' + POSIX_MADV_WILLNEED: + posix-definition: '' + POSIX_TYPED_MEM_ALLOCATE: + posix-definition: '' + POSIX_TYPED_MEM_ALLOCATE_CONTIG: + posix-definition: '' + POSIX_TYPED_MEM_MAP_ALLOCATABLE: + posix-definition: '' + PROT_EXEC: + posix-definition: '' + PROT_NONE: + posix-definition: '' + PROT_READ: + posix-definition: '' + PROT_WRITE: + posix-definition: '' + diff --git a/libc/utils/docgen/threads.json b/libc/utils/docgen/threads.json deleted file mode 100644 index 3043d148a011..000000000000 --- a/libc/utils/docgen/threads.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "macros": { - "__STDC_NO_THREADS__": { - "c-definition": "7.28.1" - }, - "ONCE_FLAG_INIT": { - "c-definition": "7.28.1", - "in-latest-posix": "" - }, - "TSS_DTOR_ITERATIONS": { - "c-definition": "7.28.1", - "in-latest-posix": "" - }, - "thread_local": { - "in-latest-posix": "" - } - }, - "functions": { - "call_once": { - "c-definition": "7.28.2.1", - "in-latest-posix": "" - }, - "cnd_broadcast": { - "c-definition": "7.28.3.1", - "in-latest-posix": "" - }, - "cnd_destroy": { - "c-definition": "7.28.3.2", - "in-latest-posix": "" - }, - "cnd_init": { - "c-definition": "7.28.3.3", - "in-latest-posix": "" - }, - "cnd_signal": { - "c-definition": "7.28.3.4", - "in-latest-posix": "" - }, - "cnd_timedwait": { - "c-definition": "7.28.3.5", - "in-latest-posix": "" - }, - "cnd_wait": { - "c-definition": "7.28.3.6", - "in-latest-posix": "" - }, - "mtx_destroy": { - "c-definition": "7.28.4.2", - "in-latest-posix": "" - }, - "mtx_init": { - "c-definition": "7.28.4.3", - "in-latest-posix": "" - }, - "mtx_lock": { - "c-definition": "7.28.4.4", - "in-latest-posix": "" - }, - "mtx_timedlock": { - "c-definition": "7.28.4.5", - "in-latest-posix": "" - }, - "mtx_trylock": { - "c-definition": "7.28.4.6", - "in-latest-posix": "" - }, - "mtx_unlock": { - "c-definition": "7.28.4.7", - "in-latest-posix": "" - }, - "thrd_create": { - "c-definition": "7.28.5.1", - "in-latest-posix": "" - }, - "thrd_current": { - "c-definition": "7.28.5.2", - "in-latest-posix": "" - }, - "thrd_detach": { - "c-definition": "7.28.5.3", - "in-latest-posix": "" - }, - "thrd_equal": { - "c-definition": "7.28.5.4", - "in-latest-posix": "" - }, - "thrd_exit": { - "c-definition": "7.28.5.5", - "in-latest-posix": "" - }, - "thrd_join": { - "c-definition": "7.28.5.6", - "in-latest-posix": "" - }, - "thrd_sleep": { - "c-definition": "7.28.5.7", - "in-latest-posix": "" - }, - "thrd_yield": { - "c-definition": "7.28.5.8", - "in-latest-posix": "" - }, - "tss_create": { - "c-definition": "7.28.6.1", - "in-latest-posix": "" - }, - "tss_delete": { - "c-definition": "7.28.6.2", - "in-latest-posix": "" - }, - "tss_get": { - "c-definition": "7.28.6.3", - "in-latest-posix": "" - }, - "tss_set": { - "c-definition": "7.28.6.4", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/threads.yaml b/libc/utils/docgen/threads.yaml new file mode 100644 index 000000000000..83db0992dc45 --- /dev/null +++ b/libc/utils/docgen/threads.yaml @@ -0,0 +1,88 @@ +functions: + call_once: + c-definition: 7.28.2.1 + in-latest-posix: '' + cnd_broadcast: + c-definition: 7.28.3.1 + in-latest-posix: '' + cnd_destroy: + c-definition: 7.28.3.2 + in-latest-posix: '' + cnd_init: + c-definition: 7.28.3.3 + in-latest-posix: '' + cnd_signal: + c-definition: 7.28.3.4 + in-latest-posix: '' + cnd_timedwait: + c-definition: 7.28.3.5 + in-latest-posix: '' + cnd_wait: + c-definition: 7.28.3.6 + in-latest-posix: '' + mtx_destroy: + c-definition: 7.28.4.2 + in-latest-posix: '' + mtx_init: + c-definition: 7.28.4.3 + in-latest-posix: '' + mtx_lock: + c-definition: 7.28.4.4 + in-latest-posix: '' + mtx_timedlock: + c-definition: 7.28.4.5 + in-latest-posix: '' + mtx_trylock: + c-definition: 7.28.4.6 + in-latest-posix: '' + mtx_unlock: + c-definition: 7.28.4.7 + in-latest-posix: '' + thrd_create: + c-definition: 7.28.5.1 + in-latest-posix: '' + thrd_current: + c-definition: 7.28.5.2 + in-latest-posix: '' + thrd_detach: + c-definition: 7.28.5.3 + in-latest-posix: '' + thrd_equal: + c-definition: 7.28.5.4 + in-latest-posix: '' + thrd_exit: + c-definition: 7.28.5.5 + in-latest-posix: '' + thrd_join: + c-definition: 7.28.5.6 + in-latest-posix: '' + thrd_sleep: + c-definition: 7.28.5.7 + in-latest-posix: '' + thrd_yield: + c-definition: 7.28.5.8 + in-latest-posix: '' + tss_create: + c-definition: 7.28.6.1 + in-latest-posix: '' + tss_delete: + c-definition: 7.28.6.2 + in-latest-posix: '' + tss_get: + c-definition: 7.28.6.3 + in-latest-posix: '' + tss_set: + c-definition: 7.28.6.4 + in-latest-posix: '' +macros: + ONCE_FLAG_INIT: + c-definition: 7.28.1 + in-latest-posix: '' + TSS_DTOR_ITERATIONS: + c-definition: 7.28.1 + in-latest-posix: '' + __STDC_NO_THREADS__: + c-definition: 7.28.1 + thread_local: + in-latest-posix: '' + diff --git a/libc/utils/docgen/uchar.json b/libc/utils/docgen/uchar.json deleted file mode 100644 index e4537873d36a..000000000000 --- a/libc/utils/docgen/uchar.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_UCHAR_H__": { - "c-definition": "7.30.1" - } - }, - "functions": { - "mbrtoc8": { - "c-definition": "7.30.2.2" - }, - "c8rtomb": { - "c-definition": "7.30.2.3" - }, - "mbrtoc16": { - "c-definition": "7.30.2.4", - "in-latest-posix": "" - }, - "c16rtomb": { - "c-definition": "7.30.2.5", - "in-latest-posix": "" - }, - "mbrtoc32": { - "c-definition": "7.30.2.6", - "in-latest-posix": "" - }, - "c32rtomb": { - "c-definition": "7.30.2.7", - "in-latest-posix": "" - } - } -} diff --git a/libc/utils/docgen/uchar.yaml b/libc/utils/docgen/uchar.yaml new file mode 100644 index 000000000000..580af0f54833 --- /dev/null +++ b/libc/utils/docgen/uchar.yaml @@ -0,0 +1,21 @@ +functions: + c16rtomb: + c-definition: 7.30.2.5 + in-latest-posix: '' + c32rtomb: + c-definition: 7.30.2.7 + in-latest-posix: '' + c8rtomb: + c-definition: 7.30.2.3 + mbrtoc16: + c-definition: 7.30.2.4 + in-latest-posix: '' + mbrtoc32: + c-definition: 7.30.2.6 + in-latest-posix: '' + mbrtoc8: + c-definition: 7.30.2.2 +macros: + __STDC_VERSION_UCHAR_H__: + c-definition: 7.30.1 + diff --git a/libc/utils/docgen/wchar.json b/libc/utils/docgen/wchar.json deleted file mode 100644 index a44f2ef82b7c..000000000000 --- a/libc/utils/docgen/wchar.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "macros": { - "__STDC_VERSION_WCHAR_H__": { - "c-definition": "7.31.1" - }, - "WEOF": { - "c-definition": "7.31.1" - } - }, - "functions": { - "fwprintf": { - "c-definition": "7.31.2.2" - }, - "fwscanf": { - "c-definition": "7.31.2.3" - }, - "swprintf": { - "c-definition": "7.31.2.4" - }, - "swscanf": { - "c-definition": "7.31.2.5" - }, - "vfwprintf": { - "c-definition": "7.31.2.6" - }, - "vfwscanf": { - "c-definition": "7.31.2.7" - }, - "vswprintf": { - "c-definition": "7.31.2.8" - }, - "vswscanf": { - "c-definition": "7.31.2.9" - }, - "vwprintf": { - "c-definition": "7.31.2.10" - }, - "vwscanf": { - "c-definition": "7.31.2.11" - }, - "wprintf": { - "c-definition": "7.31.2.12" - }, - "wscanf": { - "c-definition": "7.31.2.13" - }, - "fgetwc": { - "c-definition": "7.31.3.1" - }, - "fgetws": { - "c-definition": "7.31.3.2" - }, - "fputwc": { - "c-definition": "7.31.3.3" - }, - "fputws": { - "c-definition": "7.31.3.4" - }, - "fwide": { - "c-definition": "7.31.3.5" - }, - "getwc": { - "c-definition": "7.31.3.6" - }, - "getwchar": { - "c-definition": "7.31.3.7" - }, - "putwc": { - "c-definition": "7.31.3.8" - }, - "putwchar": { - "c-definition": "7.31.3.9" - }, - "ungetwc": { - "c-definition": "7.31.3.10" - }, - "wcstod": { - "c-definition": "7.31.4.2.2" - }, - "wcstof": { - "c-definition": "7.31.4.2.2" - }, - "wcstold": { - "c-definition": "7.31.4.2.2" - }, - "wcstod32": { - "c-definition": "7.31.4.2.3" - }, - "wcstod64": { - "c-definition": "7.31.4.2.3" - }, - "wcstod128": { - "c-definition": "7.31.4.2.3" - }, - "wcstol": { - "c-definition": "7.31.4.2.4" - }, - "wcstoll": { - "c-definition": "7.31.4.2.4" - }, - "wcstoul": { - "c-definition": "7.31.4.2.4" - }, - "wcstoull": { - "c-definition": "7.31.4.2.4" - }, - "wcscpy": { - "c-definition": "7.31.4.3.1" - }, - "wcsncpy": { - "c-definition": "7.31.4.3.2" - }, - "wmemcpy": { - "c-definition": "7.31.4.3.3" - }, - "wmemmove": { - "c-definition": "7.31.4.3.4" - }, - "wcscat": { - "c-definition": "7.31.4.4.1" - }, - "wcsncat": { - "c-definition": "7.31.4.4.2" - }, - "wcscmp": { - "c-definition": "7.31.4.5.2" - }, - "wcscoll": { - "c-definition": "7.31.4.5.3" - }, - "wcsncmp": { - "c-definition": "7.31.4.5.4" - }, - "wcsxfrm": { - "c-definition": "7.31.4.5.5" - }, - "wmemcmp": { - "c-definition": "7.31.4.5.6" - }, - "wcschr": { - "c-definition": "7.31.4.6.2" - }, - "wcscspn": { - "c-definition": "7.31.4.6.3" - }, - "wcspbrk": { - "c-definition": "7.31.4.6.4" - }, - "wcsrchr": { - "c-definition": "7.31.4.6.5" - }, - "wcsspn": { - "c-definition": "7.31.4.6.6" - }, - "wcsstr": { - "c-definition": "7.31.4.6.7" - }, - "wcstok": { - "c-definition": "7.31.4.6.8" - }, - "wmemchr": { - "c-definition": "7.31.4.6.9" - }, - "wcslen": { - "c-definition": "7.31.4.7.1" - }, - "wmemset": { - "c-definition": "7.31.4.7.2" - }, - "wcsftime": { - "c-definition": "7.31.5.1" - }, - "btowc": { - "c-definition": "7.31.6.2.1" - }, - "wctob": { - "c-definition": "7.31.6.2.2" - }, - "mbsinit": { - "c-definition": "7.31.6.3.1" - }, - "mbrlen": { - "c-definition": "7.31.6.4.2" - }, - "mbrtowc": { - "c-definition": "7.31.6.4.3" - }, - "wcrtomb": { - "c-definition": "7.31.6.4.4" - }, - "mbsrtowcs": { - "c-definition": "7.31.6.5.2" - }, - "wcsrtombs": { - "c-definition": "7.31.6.5.3" - } - } -} diff --git a/libc/utils/docgen/wchar.yaml b/libc/utils/docgen/wchar.yaml new file mode 100644 index 000000000000..dcc8963efdd3 --- /dev/null +++ b/libc/utils/docgen/wchar.yaml @@ -0,0 +1,131 @@ +functions: + btowc: + c-definition: 7.31.6.2.1 + fgetwc: + c-definition: 7.31.3.1 + fgetws: + c-definition: 7.31.3.2 + fputwc: + c-definition: 7.31.3.3 + fputws: + c-definition: 7.31.3.4 + fwide: + c-definition: 7.31.3.5 + fwprintf: + c-definition: 7.31.2.2 + fwscanf: + c-definition: 7.31.2.3 + getwc: + c-definition: 7.31.3.6 + getwchar: + c-definition: 7.31.3.7 + mbrlen: + c-definition: 7.31.6.4.2 + mbrtowc: + c-definition: 7.31.6.4.3 + mbsinit: + c-definition: 7.31.6.3.1 + mbsrtowcs: + c-definition: 7.31.6.5.2 + putwc: + c-definition: 7.31.3.8 + putwchar: + c-definition: 7.31.3.9 + swprintf: + c-definition: 7.31.2.4 + swscanf: + c-definition: 7.31.2.5 + ungetwc: + c-definition: 7.31.3.10 + vfwprintf: + c-definition: 7.31.2.6 + vfwscanf: + c-definition: 7.31.2.7 + vswprintf: + c-definition: 7.31.2.8 + vswscanf: + c-definition: 7.31.2.9 + vwprintf: + c-definition: 7.31.2.10 + vwscanf: + c-definition: 7.31.2.11 + wcrtomb: + c-definition: 7.31.6.4.4 + wcscat: + c-definition: 7.31.4.4.1 + wcschr: + c-definition: 7.31.4.6.2 + wcscmp: + c-definition: 7.31.4.5.2 + wcscoll: + c-definition: 7.31.4.5.3 + wcscpy: + c-definition: 7.31.4.3.1 + wcscspn: + c-definition: 7.31.4.6.3 + wcsftime: + c-definition: 7.31.5.1 + wcslen: + c-definition: 7.31.4.7.1 + wcsncat: + c-definition: 7.31.4.4.2 + wcsncmp: + c-definition: 7.31.4.5.4 + wcsncpy: + c-definition: 7.31.4.3.2 + wcspbrk: + c-definition: 7.31.4.6.4 + wcsrchr: + c-definition: 7.31.4.6.5 + wcsrtombs: + c-definition: 7.31.6.5.3 + wcsspn: + c-definition: 7.31.4.6.6 + wcsstr: + c-definition: 7.31.4.6.7 + wcstod: + c-definition: 7.31.4.2.2 + wcstod128: + c-definition: 7.31.4.2.3 + wcstod32: + c-definition: 7.31.4.2.3 + wcstod64: + c-definition: 7.31.4.2.3 + wcstof: + c-definition: 7.31.4.2.2 + wcstok: + c-definition: 7.31.4.6.8 + wcstol: + c-definition: 7.31.4.2.4 + wcstold: + c-definition: 7.31.4.2.2 + wcstoll: + c-definition: 7.31.4.2.4 + wcstoul: + c-definition: 7.31.4.2.4 + wcstoull: + c-definition: 7.31.4.2.4 + wcsxfrm: + c-definition: 7.31.4.5.5 + wctob: + c-definition: 7.31.6.2.2 + wmemchr: + c-definition: 7.31.4.6.9 + wmemcmp: + c-definition: 7.31.4.5.6 + wmemcpy: + c-definition: 7.31.4.3.3 + wmemmove: + c-definition: 7.31.4.3.4 + wmemset: + c-definition: 7.31.4.7.2 + wprintf: + c-definition: 7.31.2.12 + wscanf: + c-definition: 7.31.2.13 +macros: + WEOF: + c-definition: 7.31.1 + __STDC_VERSION_WCHAR_H__: + c-definition: 7.31.1 + diff --git a/libc/utils/docgen/wctype.json b/libc/utils/docgen/wctype.json deleted file mode 100644 index 29bac1d5d03a..000000000000 --- a/libc/utils/docgen/wctype.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "functions": { - "iswalnum": { - "c-definition": "7.32.2.1.1" - }, - "iswalpha": { - "c-definition": "7.32.2.1.2" - }, - "iswblank": { - "c-definition": "7.32.2.1.3" - }, - "iswblank": { - "c-definition": "7.32.2.1.4" - }, - "iswdigit": { - "c-definition": "7.32.2.1.5" - }, - "iswgraph": { - "c-definition": "7.32.2.1.6" - }, - "iswlower": { - "c-definition": "7.32.2.1.7" - }, - "iswprint": { - "c-definition": "7.32.2.1.8" - }, - "iswpunct": { - "c-definition": "7.32.2.1.9" - }, - "iswspace": { - "c-definition": "7.32.2.1.10" - }, - "iswupper": { - "c-definition": "7.32.2.1.11" - }, - "iswxdigit": { - "c-definition": "7.32.2.1.12" - }, - "iswctype": { - "c-definition": "7.32.2.2.1" - }, - "wctype": { - "c-definition": "7.32.2.2.2" - }, - "towlower": { - "c-definition": "7.32.3.1.1" - }, - "towupper": { - "c-definition": "7.32.3.1.2" - }, - "towctrans": { - "c-definition": "7.32.3.2.1" - }, - "wctrans": { - "c-definition": "7.32.3.2.2" - } - } -} diff --git a/libc/utils/docgen/wctype.yaml b/libc/utils/docgen/wctype.yaml new file mode 100644 index 000000000000..8675cbe500da --- /dev/null +++ b/libc/utils/docgen/wctype.yaml @@ -0,0 +1,36 @@ +functions: + iswalnum: + c-definition: 7.32.2.1.1 + iswalpha: + c-definition: 7.32.2.1.2 + iswblank: + c-definition: 7.32.2.1.4 + iswctype: + c-definition: 7.32.2.2.1 + iswdigit: + c-definition: 7.32.2.1.5 + iswgraph: + c-definition: 7.32.2.1.6 + iswlower: + c-definition: 7.32.2.1.7 + iswprint: + c-definition: 7.32.2.1.8 + iswpunct: + c-definition: 7.32.2.1.9 + iswspace: + c-definition: 7.32.2.1.10 + iswupper: + c-definition: 7.32.2.1.11 + iswxdigit: + c-definition: 7.32.2.1.12 + towctrans: + c-definition: 7.32.3.2.1 + towlower: + c-definition: 7.32.3.1.1 + towupper: + c-definition: 7.32.3.1.2 + wctrans: + c-definition: 7.32.3.2.2 + wctype: + c-definition: 7.32.2.2.2 + -- cgit v1.2.3 From 379cc44f56e6f220422ce85d2295833f849086e0 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Thu, 12 Dec 2024 13:28:30 -0800 Subject: Revert "[libc] Breakup freelist_malloc into separate files" (#119749) Reverts llvm/llvm-project#98784 which broke libc builders. --- libc/config/baremetal/aarch64/entrypoints.txt | 1 + libc/config/baremetal/arm/entrypoints.txt | 1 + libc/config/baremetal/riscv/entrypoints.txt | 1 + libc/src/__support/CMakeLists.txt | 8 +--- libc/src/__support/freelist_heap.cpp | 19 --------- libc/src/stdlib/CMakeLists.txt | 38 ++++++++++++----- libc/src/stdlib/baremetal/CMakeLists.txt | 50 ---------------------- libc/src/stdlib/baremetal/aligned_alloc.cpp | 21 --------- libc/src/stdlib/baremetal/calloc.cpp | 21 --------- libc/src/stdlib/baremetal/free.cpp | 19 --------- libc/src/stdlib/baremetal/malloc.cpp | 21 --------- libc/src/stdlib/baremetal/realloc.cpp | 21 --------- libc/src/stdlib/freelist_malloc.cpp | 42 ++++++++++++++++++ libc/test/src/__support/CMakeLists.txt | 2 + libc/test/src/__support/freelist_heap_test.cpp | 4 -- libc/test/src/__support/freelist_malloc_test.cpp | 54 ++++++++++++++++++++++++ 16 files changed, 130 insertions(+), 193 deletions(-) delete mode 100644 libc/src/__support/freelist_heap.cpp delete mode 100644 libc/src/stdlib/baremetal/aligned_alloc.cpp delete mode 100644 libc/src/stdlib/baremetal/calloc.cpp delete mode 100644 libc/src/stdlib/baremetal/free.cpp delete mode 100644 libc/src/stdlib/baremetal/malloc.cpp delete mode 100644 libc/src/stdlib/baremetal/realloc.cpp create mode 100644 libc/src/stdlib/freelist_malloc.cpp create mode 100644 libc/test/src/__support/freelist_malloc_test.cpp diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt index 694cd7b1993c..71b49d989429 100644 --- a/libc/config/baremetal/aarch64/entrypoints.txt +++ b/libc/config/baremetal/aarch64/entrypoints.txt @@ -184,6 +184,7 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdlib.div libc.src.stdlib.exit libc.src.stdlib.free + libc.src.stdlib.freelist_malloc libc.src.stdlib.labs libc.src.stdlib.ldiv libc.src.stdlib.llabs diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt index 694cd7b1993c..71b49d989429 100644 --- a/libc/config/baremetal/arm/entrypoints.txt +++ b/libc/config/baremetal/arm/entrypoints.txt @@ -184,6 +184,7 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdlib.div libc.src.stdlib.exit libc.src.stdlib.free + libc.src.stdlib.freelist_malloc libc.src.stdlib.labs libc.src.stdlib.ldiv libc.src.stdlib.llabs diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt index 6dc5df830eb0..e84d139d09dd 100644 --- a/libc/config/baremetal/riscv/entrypoints.txt +++ b/libc/config/baremetal/riscv/entrypoints.txt @@ -180,6 +180,7 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.stdlib.div libc.src.stdlib.exit libc.src.stdlib.free + libc.src.stdlib.freelist_malloc libc.src.stdlib.labs libc.src.stdlib.ldiv libc.src.stdlib.llabs diff --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt index 70ed67c156d1..8f85740f70a0 100644 --- a/libc/src/__support/CMakeLists.txt +++ b/libc/src/__support/CMakeLists.txt @@ -48,19 +48,13 @@ add_header_library( .freetrie ) -add_object_library( +add_header_library( freelist_heap - SRCS - freelist_heap.cpp HDRS freelist_heap.h - COMPILE_OPTIONS - -DLIBC_FREELIST_MALLOC_SIZE=${LIBC_CONF_FREELIST_MALLOC_BUFFER_SIZE} DEPENDS .block - .freelist .freestore - .freetrie libc.src.__support.CPP.cstddef libc.src.__support.CPP.array libc.src.__support.CPP.optional diff --git a/libc/src/__support/freelist_heap.cpp b/libc/src/__support/freelist_heap.cpp deleted file mode 100644 index 4deb0e0f09e2..000000000000 --- a/libc/src/__support/freelist_heap.cpp +++ /dev/null @@ -1,19 +0,0 @@ -//===-- Implementation for freelist_heap ----------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -static LIBC_CONSTINIT FreeListHeap freelist_heap_symbols; -FreeListHeap *freelist_heap = &freelist_heap_symbols; - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/CMakeLists.txt b/libc/src/stdlib/CMakeLists.txt index 40ba9ead9a7a..14d06534a604 100644 --- a/libc/src/stdlib/CMakeLists.txt +++ b/libc/src/stdlib/CMakeLists.txt @@ -323,7 +323,7 @@ add_entrypoint_object( .rand_util ) -if(NOT LIBC_TARGET_OS_IS_BAREMETAL AND NOT LIBC_TARGET_OS_IS_GPU) +if(NOT LIBC_TARGET_OS_IS_GPU) if(LLVM_LIBC_INCLUDE_SCUDO) set(SCUDO_DEPS "") @@ -349,7 +349,7 @@ if(NOT LIBC_TARGET_OS_IS_BAREMETAL AND NOT LIBC_TARGET_OS_IS_GPU) list(APPEND SCUDO_DEPS RTScudoStandalone.${LIBC_TARGET_ARCHITECTURE_FOR_SCUDO} RTScudoStandaloneCWrappers.${LIBC_TARGET_ARCHITECTURE_FOR_SCUDO}) - + if (COMPILER_RT_BUILD_GWP_ASAN) list(APPEND SCUDO_DEPS RTGwpAsan.${LIBC_TARGET_ARCHITECTURE_FOR_SCUDO} @@ -389,8 +389,32 @@ if(NOT LIBC_TARGET_OS_IS_BAREMETAL AND NOT LIBC_TARGET_OS_IS_GPU) ${SCUDO_DEPS} ) else() + # Only use freelist malloc for baremetal targets. + add_entrypoint_object( + freelist_malloc + SRCS + freelist_malloc.cpp + HDRS + malloc.h + DEPENDS + libc.src.__support.freelist_heap + ) + get_target_property(freelist_malloc_is_skipped libc.src.stdlib.freelist_malloc "SKIPPED") + if(LIBC_TARGET_OS_IS_BAREMETAL AND NOT freelist_malloc_is_skipped) + add_entrypoint_object( + malloc + ALIAS + DEPENDS + .freelist_malloc + ) + else() + add_entrypoint_external( + malloc + ) + endif() + add_entrypoint_external( - malloc + free ) add_entrypoint_external( calloc @@ -401,12 +425,6 @@ if(NOT LIBC_TARGET_OS_IS_BAREMETAL AND NOT LIBC_TARGET_OS_IS_GPU) add_entrypoint_external( aligned_alloc ) - add_entrypoint_external( - free - ) - add_entrypoint_external( - mallopt - ) endif() endif() @@ -495,7 +513,7 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) endif() -if(LIBC_TARGET_OS_IS_BAREMETAL OR LIBC_TARGET_OS_IS_GPU) +if(LIBC_TARGET_OS_IS_GPU) add_entrypoint_object( malloc ALIAS diff --git a/libc/src/stdlib/baremetal/CMakeLists.txt b/libc/src/stdlib/baremetal/CMakeLists.txt index 67ab1979e4d1..551a83a36b20 100644 --- a/libc/src/stdlib/baremetal/CMakeLists.txt +++ b/libc/src/stdlib/baremetal/CMakeLists.txt @@ -5,53 +5,3 @@ add_entrypoint_object( HDRS ../abort.h ) - -add_entrypoint_object( - malloc - SRCS - malloc.cpp - HDRS - ../malloc.h - DEPENDS - libc.src.__support.freelist_heap -) - -add_entrypoint_object( - free - SRCS - free.cpp - HDRS - ../free.h - DEPENDS - libc.src.__support.freelist_heap -) - -add_entrypoint_object( - calloc - SRCS - calloc.cpp - HDRS - ../calloc.h - DEPENDS - libc.src.__support.freelist_heap -) - -add_entrypoint_object( - realloc - SRCS - realloc.cpp - HDRS - ../realloc.h - DEPENDS - libc.src.__support.freelist_heap -) - -add_entrypoint_object( - aligned_alloc - SRCS - aligned_alloc.cpp - HDRS - ../aligned_alloc.h - DEPENDS - libc.src.__support.freelist_heap -) diff --git a/libc/src/stdlib/baremetal/aligned_alloc.cpp b/libc/src/stdlib/baremetal/aligned_alloc.cpp deleted file mode 100644 index e9548719c3a6..000000000000 --- a/libc/src/stdlib/baremetal/aligned_alloc.cpp +++ /dev/null @@ -1,21 +0,0 @@ -//===-- Implementation for freelist_malloc --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/stdlib/aligned_alloc.h" -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -LLVM_LIBC_FUNCTION(void *, aligned_alloc, (size_t alignment, size_t size)) { - return freelist_heap->aligned_allocate(alignment, size); -} - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/calloc.cpp b/libc/src/stdlib/baremetal/calloc.cpp deleted file mode 100644 index 2b3b83cebc8a..000000000000 --- a/libc/src/stdlib/baremetal/calloc.cpp +++ /dev/null @@ -1,21 +0,0 @@ -//===-- Implementation for freelist_malloc --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/stdlib/calloc.h" -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -LLVM_LIBC_FUNCTION(void *, calloc, (size_t num, size_t size)) { - return freelist_heap->calloc(num, size); -} - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/free.cpp b/libc/src/stdlib/baremetal/free.cpp deleted file mode 100644 index 1e25fe5f2dcf..000000000000 --- a/libc/src/stdlib/baremetal/free.cpp +++ /dev/null @@ -1,19 +0,0 @@ -//===-- Implementation for freelist_malloc --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/stdlib/free.h" -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -LLVM_LIBC_FUNCTION(void, free, (void *ptr)) { return freelist_heap->free(ptr); } - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/malloc.cpp b/libc/src/stdlib/baremetal/malloc.cpp deleted file mode 100644 index a299282667fc..000000000000 --- a/libc/src/stdlib/baremetal/malloc.cpp +++ /dev/null @@ -1,21 +0,0 @@ -//===-- Implementation for freelist_malloc --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/stdlib/malloc.h" -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -LLVM_LIBC_FUNCTION(void *, malloc, (size_t size)) { - return freelist_heap->allocate(size); -} - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/baremetal/realloc.cpp b/libc/src/stdlib/baremetal/realloc.cpp deleted file mode 100644 index fb25c68ec429..000000000000 --- a/libc/src/stdlib/baremetal/realloc.cpp +++ /dev/null @@ -1,21 +0,0 @@ -//===-- Implementation for freelist_malloc --------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/stdlib/realloc.h" -#include "src/__support/freelist_heap.h" -#include "src/__support/macros/config.h" - -#include - -namespace LIBC_NAMESPACE_DECL { - -LLVM_LIBC_FUNCTION(void *, realloc, (void *ptr, size_t size)) { - return freelist_heap->realloc(ptr, size); -} - -} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/stdlib/freelist_malloc.cpp b/libc/src/stdlib/freelist_malloc.cpp new file mode 100644 index 000000000000..fe56fad76937 --- /dev/null +++ b/libc/src/stdlib/freelist_malloc.cpp @@ -0,0 +1,42 @@ +//===-- Implementation for freelist_malloc --------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/__support/freelist_heap.h" +#include "src/__support/macros/config.h" +#include "src/stdlib/aligned_alloc.h" +#include "src/stdlib/calloc.h" +#include "src/stdlib/free.h" +#include "src/stdlib/malloc.h" +#include "src/stdlib/realloc.h" + +#include + +namespace LIBC_NAMESPACE_DECL { + +static LIBC_CONSTINIT FreeListHeap freelist_heap_symbols; +FreeListHeap *freelist_heap = &freelist_heap_symbols; + +LLVM_LIBC_FUNCTION(void *, malloc, (size_t size)) { + return freelist_heap->allocate(size); +} + +LLVM_LIBC_FUNCTION(void, free, (void *ptr)) { return freelist_heap->free(ptr); } + +LLVM_LIBC_FUNCTION(void *, calloc, (size_t num, size_t size)) { + return freelist_heap->calloc(num, size); +} + +LLVM_LIBC_FUNCTION(void *, realloc, (void *ptr, size_t size)) { + return freelist_heap->realloc(ptr, size); +} + +LLVM_LIBC_FUNCTION(void *, aligned_alloc, (size_t alignment, size_t size)) { + return freelist_heap->aligned_allocate(alignment, size); +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/test/src/__support/CMakeLists.txt b/libc/test/src/__support/CMakeLists.txt index 59bce9b96e39..bcc86effd9a5 100644 --- a/libc/test/src/__support/CMakeLists.txt +++ b/libc/test/src/__support/CMakeLists.txt @@ -63,9 +63,11 @@ if(LLVM_LIBC_FULL_BUILD) SRCS fake_heap.s freelist_heap_test.cpp + freelist_malloc_test.cpp DEPENDS libc.src.__support.CPP.span libc.src.__support.freelist_heap + libc.src.stdlib.freelist_malloc libc.src.string.memcmp libc.src.string.memcpy ) diff --git a/libc/test/src/__support/freelist_heap_test.cpp b/libc/test/src/__support/freelist_heap_test.cpp index 07b9a09d77bb..991c158825a8 100644 --- a/libc/test/src/__support/freelist_heap_test.cpp +++ b/libc/test/src/__support/freelist_heap_test.cpp @@ -9,10 +9,6 @@ #include "src/__support/CPP/span.h" #include "src/__support/freelist_heap.h" #include "src/__support/macros/config.h" -#include "src/stdlib/aligned_alloc.h" -#include "src/stdlib/calloc.h" -#include "src/stdlib/free.h" -#include "src/stdlib/malloc.h" #include "src/string/memcmp.h" #include "src/string/memcpy.h" #include "test/UnitTest/Test.h" diff --git a/libc/test/src/__support/freelist_malloc_test.cpp b/libc/test/src/__support/freelist_malloc_test.cpp new file mode 100644 index 000000000000..793e2498304f --- /dev/null +++ b/libc/test/src/__support/freelist_malloc_test.cpp @@ -0,0 +1,54 @@ +//===-- Unittests for freelist_malloc -------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/__support/freelist_heap.h" +#include "src/stdlib/aligned_alloc.h" +#include "src/stdlib/calloc.h" +#include "src/stdlib/free.h" +#include "src/stdlib/malloc.h" +#include "test/UnitTest/Test.h" + +using LIBC_NAMESPACE::Block; +using LIBC_NAMESPACE::freelist_heap; +using LIBC_NAMESPACE::FreeListHeap; +using LIBC_NAMESPACE::FreeListHeapBuffer; + +TEST(LlvmLibcFreeListMalloc, Malloc) { + constexpr size_t kAllocSize = 256; + constexpr size_t kCallocNum = 4; + constexpr size_t kCallocSize = 64; + + void *ptr1 = LIBC_NAMESPACE::malloc(kAllocSize); + auto *block = Block::from_usable_space(ptr1); + EXPECT_GE(block->inner_size(), kAllocSize); + + LIBC_NAMESPACE::free(ptr1); + ASSERT_NE(block->next(), static_cast(nullptr)); + ASSERT_EQ(block->next()->next(), static_cast(nullptr)); + size_t heap_size = block->inner_size(); + + void *ptr2 = LIBC_NAMESPACE::calloc(kCallocNum, kCallocSize); + ASSERT_EQ(ptr2, ptr1); + EXPECT_GE(block->inner_size(), kCallocNum * kCallocSize); + + for (size_t i = 0; i < kCallocNum * kCallocSize; ++i) + EXPECT_EQ(reinterpret_cast(ptr2)[i], uint8_t(0)); + + LIBC_NAMESPACE::free(ptr2); + EXPECT_EQ(block->inner_size(), heap_size); + + constexpr size_t ALIGN = kAllocSize; + void *ptr3 = LIBC_NAMESPACE::aligned_alloc(ALIGN, kAllocSize); + EXPECT_NE(ptr3, static_cast(nullptr)); + EXPECT_EQ(reinterpret_cast(ptr3) % ALIGN, size_t(0)); + auto *aligned_block = reinterpret_cast(ptr3); + EXPECT_GE(aligned_block->inner_size(), kAllocSize); + + LIBC_NAMESPACE::free(ptr3); + EXPECT_EQ(block->inner_size(), heap_size); +} -- cgit v1.2.3 From 7071cd3885d06bc1ac388db0188468d135b37dfa Mon Sep 17 00:00:00 2001 From: Kirill Stoimenov Date: Thu, 12 Dec 2024 21:31:15 +0000 Subject: Revert "[Transforms] Silence a warning in SROA.cpp (NFC)" This reverts commit 5b077506de26b1dfce1926895548b86f2106bed9. --- llvm/lib/Transforms/Scalar/SROA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 2cb3525231ea..5b78b9c80a92 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -5523,7 +5523,7 @@ bool SROA::propagateStoredValuesToLoads(AllocaInst &AI, AllocaSlices &AS) { Insts.push_back(User); } else if (auto *SI = dyn_cast(User)) { Type *UserTy = SI->getValueOperand()->getType(); - if (!SI->isSimple() || (PartitionType && UserTy != PartitionType)) + if (!SI->isSimple() || PartitionType && UserTy != PartitionType) AllSameAndValid = false; PartitionType = UserTy; Insts.push_back(User); -- cgit v1.2.3 From e3676aa21f875c12d878726a1de1663ebf428cc2 Mon Sep 17 00:00:00 2001 From: Kirill Stoimenov Date: Thu, 12 Dec 2024 21:31:28 +0000 Subject: Revert "[SROA] Optimize reloaded values in allocas that escape into readonly nocapture calls. (#116645)" Causing buffer overflow: SUMMARY: AddressSanitizer: heap-buffer-overflow llvm/lib/Transforms/Scalar/SROA.cpp:5552:35 This reverts commit 5e247d726d7a54cf0acc997bc17b50e7494e6fa3. --- llvm/include/llvm/Analysis/PtrUseVisitor.h | 14 --- llvm/include/llvm/Transforms/Utils/SSAUpdater.h | 7 -- llvm/lib/Transforms/Scalar/SROA.cpp | 108 +-------------------- llvm/lib/Transforms/Utils/SSAUpdater.cpp | 14 +-- .../Transforms/SROA/non-capturing-call-readonly.ll | 99 +++++++++++-------- llvm/test/Transforms/SROA/readonlynocapture.ll | 31 ++++-- 6 files changed, 82 insertions(+), 191 deletions(-) diff --git a/llvm/include/llvm/Analysis/PtrUseVisitor.h b/llvm/include/llvm/Analysis/PtrUseVisitor.h index c9d3874e7dd9..bbe2741f44fc 100644 --- a/llvm/include/llvm/Analysis/PtrUseVisitor.h +++ b/llvm/include/llvm/Analysis/PtrUseVisitor.h @@ -64,9 +64,6 @@ public: /// Is the pointer escaped at some point? bool isEscaped() const { return EscapedInfo != nullptr; } - /// Is the pointer escaped into a read-only nocapture call at some point? - bool isEscapedReadOnly() const { return EscapedReadOnly != nullptr; } - /// Get the instruction causing the visit to abort. /// \returns a pointer to the instruction causing the abort if one is /// available; otherwise returns null. @@ -77,10 +74,6 @@ public: /// is available; otherwise returns null. Instruction *getEscapingInst() const { return EscapedInfo; } - /// Get the instruction causing the pointer to escape which is a read-only - /// nocapture call. - Instruction *getEscapedReadOnlyInst() const { return EscapedReadOnly; } - /// Mark the visit as aborted. Intended for use in a void return. /// \param I The instruction which caused the visit to abort, if available. void setAborted(Instruction *I) { @@ -95,12 +88,6 @@ public: EscapedInfo = I; } - /// Mark the pointer as escaped into a readonly-nocapture call. - void setEscapedReadOnly(Instruction *I) { - assert(I && "Expected a valid pointer in setEscapedReadOnly"); - EscapedReadOnly = I; - } - /// Mark the pointer as escaped, and the visit as aborted. Intended /// for use in a void return. /// \param I The instruction which both escapes the pointer and aborts the @@ -113,7 +100,6 @@ public: private: Instruction *AbortedInfo = nullptr; Instruction *EscapedInfo = nullptr; - Instruction *EscapedReadOnly = nullptr; }; protected: diff --git a/llvm/include/llvm/Transforms/Utils/SSAUpdater.h b/llvm/include/llvm/Transforms/Utils/SSAUpdater.h index 989cf0b2d0e7..73649766a953 100644 --- a/llvm/include/llvm/Transforms/Utils/SSAUpdater.h +++ b/llvm/include/llvm/Transforms/Utils/SSAUpdater.h @@ -188,13 +188,6 @@ public: /// Return false if a sub-class wants to keep one of the loads/stores /// after the SSA construction. virtual bool shouldDelete(Instruction *I) const { return true; } - - /// Return the value to use for the point in the code that the alloca is - /// positioned. This will only be used if an Alloca is included in Insts, - /// otherwise the value of a uninitialized load will be assumed to be poison. - virtual Value *getValueToUseForAlloca(Instruction *AI) const { - return nullptr; - } }; } // end namespace llvm diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 5b78b9c80a92..d80af26451ac 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -43,7 +43,6 @@ #include "llvm/Analysis/GlobalsModRef.h" #include "llvm/Analysis/Loads.h" #include "llvm/Analysis/PtrUseVisitor.h" -#include "llvm/Analysis/ValueTracking.h" #include "llvm/Config/llvm-config.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constant.h" @@ -84,7 +83,6 @@ #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Local.h" #include "llvm/Transforms/Utils/PromoteMemToReg.h" -#include "llvm/Transforms/Utils/SSAUpdater.h" #include #include #include @@ -248,7 +246,6 @@ private: bool presplitLoadsAndStores(AllocaInst &AI, AllocaSlices &AS); AllocaInst *rewritePartition(AllocaInst &AI, AllocaSlices &AS, Partition &P); bool splitAlloca(AllocaInst &AI, AllocaSlices &AS); - bool propagateStoredValuesToLoads(AllocaInst &AI, AllocaSlices &AS); std::pair runOnAlloca(AllocaInst &AI); void clobberUse(Use &U); bool deleteDeadInstructions(SmallPtrSetImpl &DeletedAllocas); @@ -601,7 +598,6 @@ public: /// If this is true, the slices are never fully built and should be /// ignored. bool isEscaped() const { return PointerEscapingInstr; } - bool isEscapedReadOnly() const { return PointerEscapingInstrReadOnly; } /// Support for iterating over the slices. /// @{ @@ -684,7 +680,6 @@ private: /// store a pointer to that here and abort trying to form slices of the /// alloca. This will be null if the alloca slices are analyzed successfully. Instruction *PointerEscapingInstr; - Instruction *PointerEscapingInstrReadOnly; /// The slices of the alloca. /// @@ -1395,18 +1390,6 @@ private: /// Disable SROA entirely if there are unhandled users of the alloca. void visitInstruction(Instruction &I) { PI.setAborted(&I); } - - void visitCallBase(CallBase &CB) { - // If the call operand is NoCapture ReadOnly, then we mark it as - // EscapedReadOnly. - if (CB.doesNotCapture(U->getOperandNo()) && - CB.onlyReadsMemory(U->getOperandNo())) { - PI.setEscapedReadOnly(&CB); - return; - } - - Base::visitCallBase(CB); - } }; AllocaSlices::AllocaSlices(const DataLayout &DL, AllocaInst &AI) @@ -1414,7 +1397,7 @@ AllocaSlices::AllocaSlices(const DataLayout &DL, AllocaInst &AI) #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) AI(AI), #endif - PointerEscapingInstr(nullptr), PointerEscapingInstrReadOnly(nullptr) { + PointerEscapingInstr(nullptr) { SliceBuilder PB(DL, AI, *this); SliceBuilder::PtrInfo PtrI = PB.visitPtr(AI); if (PtrI.isEscaped() || PtrI.isAborted()) { @@ -1425,7 +1408,6 @@ AllocaSlices::AllocaSlices(const DataLayout &DL, AllocaInst &AI) assert(PointerEscapingInstr && "Did not track a bad instruction"); return; } - PointerEscapingInstrReadOnly = PtrI.getEscapedReadOnlyInst(); llvm::erase_if(Slices, [](const Slice &S) { return S.isDead(); }); @@ -1463,9 +1445,6 @@ void AllocaSlices::print(raw_ostream &OS) const { return; } - if (PointerEscapingInstrReadOnly) - OS << "Escapes into ReadOnly: " << *PointerEscapingInstrReadOnly << "\n"; - OS << "Slices of alloca: " << AI << "\n"; for (const_iterator I = begin(), E = end(); I != E; ++I) print(OS, I); @@ -5475,86 +5454,6 @@ void SROA::clobberUse(Use &U) { } } -/// A basic LoadAndStorePromoter that does not remove store nodes. -class BasicLoadAndStorePromoter : public LoadAndStorePromoter { -public: - BasicLoadAndStorePromoter(ArrayRef Insts, SSAUpdater &S, - Type *ZeroType) - : LoadAndStorePromoter(Insts, S), ZeroType(ZeroType) {} - bool shouldDelete(Instruction *I) const override { - return !isa(I) && !isa(I); - } - - Value *getValueToUseForAlloca(Instruction *I) const override { - return UndefValue::get(ZeroType); - } - -private: - Type *ZeroType; -}; - -bool SROA::propagateStoredValuesToLoads(AllocaInst &AI, AllocaSlices &AS) { - // Look through each "partition", looking for slices with the same start/end - // that do not overlap with any before them. The slices are sorted by - // increasing beginOffset. We don't use AS.partitions(), as it will use a more - // sophisticated algorithm that takes splittable slices into account. - auto PartitionBegin = AS.begin(); - auto PartitionEnd = PartitionBegin; - uint64_t BeginOffset = PartitionBegin->beginOffset(); - uint64_t EndOffset = PartitionBegin->endOffset(); - while (PartitionBegin != AS.end()) { - bool AllSameAndValid = true; - SmallVector Insts; - Type *PartitionType = nullptr; - while (PartitionEnd != AS.end() && - (PartitionEnd->beginOffset() < EndOffset || - PartitionEnd->endOffset() <= EndOffset)) { - if (AllSameAndValid) { - AllSameAndValid &= PartitionEnd->beginOffset() == BeginOffset && - PartitionEnd->endOffset() == EndOffset; - Instruction *User = - cast(PartitionEnd->getUse()->getUser()); - if (auto *LI = dyn_cast(User)) { - Type *UserTy = LI->getType(); - // LoadAndStorePromoter requires all the types to be the same. - if (!LI->isSimple() || (PartitionType && UserTy != PartitionType)) - AllSameAndValid = false; - PartitionType = UserTy; - Insts.push_back(User); - } else if (auto *SI = dyn_cast(User)) { - Type *UserTy = SI->getValueOperand()->getType(); - if (!SI->isSimple() || PartitionType && UserTy != PartitionType) - AllSameAndValid = false; - PartitionType = UserTy; - Insts.push_back(User); - } else if (!isAssumeLikeIntrinsic(User)) { - AllSameAndValid = false; - } - } - EndOffset = std::max(EndOffset, PartitionEnd->endOffset()); - ++PartitionEnd; - } - - // So long as all the slices start and end offsets matched, update loads to - // the values stored in the partition. - if (AllSameAndValid && !Insts.empty()) { - LLVM_DEBUG(dbgs() << "Propagate values on slice [" << BeginOffset << ", " - << EndOffset << ")\n"); - SmallVector NewPHIs; - SSAUpdater SSA(&NewPHIs); - Insts.push_back(&AI); - BasicLoadAndStorePromoter Promoter(Insts, SSA, PartitionType); - Promoter.run(Insts); - } - - // Step on to the next partition. - PartitionBegin = PartitionEnd; - BeginOffset = PartitionBegin->beginOffset(); - EndOffset = PartitionBegin->endOffset(); - } - return true; -} - /// Analyze an alloca for SROA. /// /// This analyzes the alloca to ensure we can reason about it, builds @@ -5595,11 +5494,6 @@ SROA::runOnAlloca(AllocaInst &AI) { if (AS.isEscaped()) return {Changed, CFGChanged}; - if (AS.isEscapedReadOnly()) { - Changed |= propagateStoredValuesToLoads(AI, AS); - return {Changed, CFGChanged}; - } - // Delete all the dead users of this alloca before splitting and rewriting it. for (Instruction *DeadUser : AS.getDeadUsers()) { // Free up everything used by this instruction. diff --git a/llvm/lib/Transforms/Utils/SSAUpdater.cpp b/llvm/lib/Transforms/Utils/SSAUpdater.cpp index 4bf4acd6330f..597d470f18ff 100644 --- a/llvm/lib/Transforms/Utils/SSAUpdater.cpp +++ b/llvm/lib/Transforms/Utils/SSAUpdater.cpp @@ -412,13 +412,9 @@ void LoadAndStorePromoter::run(const SmallVectorImpl &Insts) { if (StoreInst *SI = dyn_cast(User)) { updateDebugInfo(SI); SSA.AddAvailableValue(BB, SI->getOperand(0)); - } else if (auto *AI = dyn_cast(User)) { - // We treat AllocaInst as a store of an getValueToUseForAlloca value. - SSA.AddAvailableValue(BB, getValueToUseForAlloca(AI)); - } else { + } else // Otherwise it is a load, queue it to rewrite as a live-in load. LiveInLoads.push_back(cast(User)); - } BlockUses.clear(); continue; } @@ -426,7 +422,7 @@ void LoadAndStorePromoter::run(const SmallVectorImpl &Insts) { // Otherwise, check to see if this block is all loads. bool HasStore = false; for (Instruction *I : BlockUses) { - if (isa(I) || isa(I)) { + if (isa(I)) { HasStore = true; break; } @@ -472,12 +468,6 @@ void LoadAndStorePromoter::run(const SmallVectorImpl &Insts) { // Remember that this is the active value in the block. StoredValue = SI->getOperand(0); - } else if (auto *AI = dyn_cast(&I)) { - // Check if this an alloca, in which case we treat it as a store of - // getValueToUseForAlloca. - if (!isInstInList(AI, Insts)) - continue; - StoredValue = getValueToUseForAlloca(AI); } } diff --git a/llvm/test/Transforms/SROA/non-capturing-call-readonly.ll b/llvm/test/Transforms/SROA/non-capturing-call-readonly.ll index cc57abe391aa..87862b929a75 100644 --- a/llvm/test/Transforms/SROA/non-capturing-call-readonly.ll +++ b/llvm/test/Transforms/SROA/non-capturing-call-readonly.ll @@ -9,18 +9,19 @@ define i32 @alloca_used_in_call(ptr %data, i64 %n) { ; CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: ; CHECK-NEXT: [[I0:%.*]] = call i32 @user_of_alloca(ptr [[RETVAL]]) -; CHECK-NEXT: ret i32 [[RDX_INC]] +; CHECK-NEXT: [[I1:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: ret i32 [[I1]] ; entry: %retval = alloca i32, align 4 @@ -137,18 +138,19 @@ define i32 @alloca_not_captured_and_readonly_as_per_operand_attr(ptr %data, i64 ; CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: ; CHECK-NEXT: [[I0:%.*]] = call i32 @capture_of_alloca(ptr nocapture readonly [[RETVAL]]) -; CHECK-NEXT: ret i32 [[RDX_INC]] +; CHECK-NEXT: [[I1:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: ret i32 [[I1]] ; entry: %retval = alloca i32, align 4 @@ -265,18 +267,19 @@ define i32 @alloca_with_gep_used_in_call(ptr %data, i64 %n) { ; CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] ; CHECK-NEXT: br i1 [[EXITCOND]], label [[LOOP]], label [[EXIT:%.*]] ; CHECK: exit: ; CHECK-NEXT: [[I0:%.*]] = call i32 @user_of_alloca(ptr [[RETVAL]]) -; CHECK-NEXT: ret i32 [[RDX_INC]] +; CHECK-NEXT: [[I1:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: ret i32 [[I1]] ; entry: %retval = alloca i32, align 4 @@ -350,11 +353,11 @@ define i32 @alloca_used_in_maybe_throwing_call(ptr %data, i64 %n) personality pt ; CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] @@ -369,7 +372,8 @@ define i32 @alloca_used_in_maybe_throwing_call(ptr %data, i64 %n) personality pt ; CHECK-NEXT: catch ptr null ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: ret i32 [[RDX_INC]] +; CHECK-NEXT: [[I2:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: ret i32 [[I2]] ; entry: %retval = alloca i32, align 4 @@ -409,11 +413,11 @@ define i32 @alloca_used_in_maybe_throwing_call_with_same_dests(ptr %data, i64 %n ; CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] @@ -426,7 +430,8 @@ define i32 @alloca_used_in_maybe_throwing_call_with_same_dests(ptr %data, i64 %n ; CHECK-NEXT: catch ptr null ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: ret i32 [[RDX_INC]] +; CHECK-NEXT: [[I2:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: ret i32 [[I2]] ; entry: %retval = alloca i32, align 4 @@ -467,11 +472,11 @@ define [2 x i32] @part_of_alloca_used_in_call(ptr %data, i64 %n) { ; CHECK-NEXT: [[RETVAL:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i64 0, i64 1 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] @@ -479,9 +484,11 @@ define [2 x i32] @part_of_alloca_used_in_call(ptr %data, i64 %n) { ; CHECK: exit: ; CHECK-NEXT: [[I0:%.*]] = call i32 @user_of_alloca(ptr [[RETVAL]]) ; CHECK-NEXT: [[I1_FCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 0 -; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 0, 0 +; CHECK-NEXT: [[I1_FCA_0_LOAD:%.*]] = load i32, ptr [[I1_FCA_0_GEP]], align 4 +; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 [[I1_FCA_0_LOAD]], 0 ; CHECK-NEXT: [[I1_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 1 -; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[RDX_INC]], 1 +; CHECK-NEXT: [[I1_FCA_1_LOAD:%.*]] = load i32, ptr [[I1_FCA_1_GEP]], align 4 +; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[I1_FCA_1_LOAD]], 1 ; CHECK-NEXT: ret [2 x i32] [[I1_FCA_1_INSERT]] ; entry: @@ -518,11 +525,11 @@ define [2 x i32] @all_parts_of_alloca_used_in_call_with_multiple_args(ptr %data, ; CHECK-NEXT: [[RETVAL:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i64 0, i64 1 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] @@ -530,9 +537,11 @@ define [2 x i32] @all_parts_of_alloca_used_in_call_with_multiple_args(ptr %data, ; CHECK: exit: ; CHECK-NEXT: [[I0:%.*]] = call i32 @user_of_alloca_with_multiple_args(ptr [[RETVAL]], ptr [[RETVAL_FULL]]) ; CHECK-NEXT: [[I1_FCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 0 -; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 0, 0 +; CHECK-NEXT: [[I1_FCA_0_LOAD:%.*]] = load i32, ptr [[I1_FCA_0_GEP]], align 4 +; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 [[I1_FCA_0_LOAD]], 0 ; CHECK-NEXT: [[I1_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 1 -; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[RDX_INC]], 1 +; CHECK-NEXT: [[I1_FCA_1_LOAD:%.*]] = load i32, ptr [[I1_FCA_1_GEP]], align 4 +; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[I1_FCA_1_LOAD]], 1 ; CHECK-NEXT: ret [2 x i32] [[I1_FCA_1_INSERT]] ; entry: @@ -679,11 +688,11 @@ define [2 x i32] @part_of_alloca_used_in_call_with_multiple_args(ptr %data, i64 ; CHECK-NEXT: [[RETVAL:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i64 0, i64 1 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] @@ -691,9 +700,11 @@ define [2 x i32] @part_of_alloca_used_in_call_with_multiple_args(ptr %data, i64 ; CHECK: exit: ; CHECK-NEXT: [[I0:%.*]] = call i32 @user_of_alloca_with_multiple_args(ptr [[RETVAL]], ptr [[RETVAL]]) ; CHECK-NEXT: [[I1_FCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 0 -; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 0, 0 +; CHECK-NEXT: [[I1_FCA_0_LOAD:%.*]] = load i32, ptr [[I1_FCA_0_GEP]], align 4 +; CHECK-NEXT: [[I1_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 [[I1_FCA_0_LOAD]], 0 ; CHECK-NEXT: [[I1_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 1 -; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[RDX_INC]], 1 +; CHECK-NEXT: [[I1_FCA_1_LOAD:%.*]] = load i32, ptr [[I1_FCA_1_GEP]], align 4 +; CHECK-NEXT: [[I1_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I1_FCA_0_INSERT]], i32 [[I1_FCA_1_LOAD]], 1 ; CHECK-NEXT: ret [2 x i32] [[I1_FCA_1_INSERT]] ; entry: @@ -731,11 +742,11 @@ define [2 x i32] @all_parts_of_alloca_used_in_calls_with_multiple_args(ptr %data ; CHECK-NEXT: [[RETVAL:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i64 0, i64 1 ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: -; CHECK-NEXT: [[RDX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[RDX_INC:%.*]], [[LOOP]] ] -; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[LOOP]] ] ; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[DATA:%.*]], i64 [[INDVARS_IV]] ; CHECK-NEXT: [[LD:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 -; CHECK-NEXT: [[RDX_INC]] = add nsw i32 [[RDX]], [[LD]] +; CHECK-NEXT: [[RDX:%.*]] = load i32, ptr [[RETVAL]], align 4 +; CHECK-NEXT: [[RDX_INC:%.*]] = add nsw i32 [[RDX]], [[LD]] ; CHECK-NEXT: store i32 [[RDX_INC]], ptr [[RETVAL]], align 4 ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1 ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], [[N:%.*]] @@ -745,9 +756,11 @@ define [2 x i32] @all_parts_of_alloca_used_in_calls_with_multiple_args(ptr %data ; CHECK-NEXT: [[I1:%.*]] = call i32 @user_of_alloca_with_multiple_args(ptr [[RETVAL_FULL]], ptr [[RETVAL]]) ; CHECK-NEXT: [[I2:%.*]] = call i32 @capture_of_alloca(ptr [[SOME_ANOTHER_ALLOCA_FULL]]) ; CHECK-NEXT: [[I3_FCA_0_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 0 -; CHECK-NEXT: [[I3_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 0, 0 +; CHECK-NEXT: [[I3_FCA_0_LOAD:%.*]] = load i32, ptr [[I3_FCA_0_GEP]], align 4 +; CHECK-NEXT: [[I3_FCA_0_INSERT:%.*]] = insertvalue [2 x i32] poison, i32 [[I3_FCA_0_LOAD]], 0 ; CHECK-NEXT: [[I3_FCA_1_GEP:%.*]] = getelementptr inbounds [2 x i32], ptr [[RETVAL_FULL]], i32 0, i32 1 -; CHECK-NEXT: [[I3_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I3_FCA_0_INSERT]], i32 [[RDX_INC]], 1 +; CHECK-NEXT: [[I3_FCA_1_LOAD:%.*]] = load i32, ptr [[I3_FCA_1_GEP]], align 4 +; CHECK-NEXT: [[I3_FCA_1_INSERT:%.*]] = insertvalue [2 x i32] [[I3_FCA_0_INSERT]], i32 [[I3_FCA_1_LOAD]], 1 ; CHECK-NEXT: ret [2 x i32] [[I3_FCA_1_INSERT]] ; entry: @@ -838,7 +851,8 @@ define i8 @dont_transform_load_only() { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[A:%.*]] = alloca i8, align 1 ; CHECK-NEXT: call void @byte_user_of_alloca(ptr [[A]]) -; CHECK-NEXT: ret i8 undef +; CHECK-NEXT: [[R:%.*]] = load i8, ptr [[A]], align 1 +; CHECK-NEXT: ret i8 [[R]] ; entry: %a = alloca i8 @@ -852,7 +866,8 @@ define i8 @transform_load_and_store() { ; CHECK-NEXT: [[A:%.*]] = alloca i8, align 1 ; CHECK-NEXT: store i8 0, ptr [[A]], align 1 ; CHECK-NEXT: call void @byte_user_of_alloca(ptr [[A]]) -; CHECK-NEXT: ret i8 0 +; CHECK-NEXT: [[R:%.*]] = load i8, ptr [[A]], align 1 +; CHECK-NEXT: ret i8 [[R]] ; entry: %a = alloca i8 diff --git a/llvm/test/Transforms/SROA/readonlynocapture.ll b/llvm/test/Transforms/SROA/readonlynocapture.ll index 2284a0012667..2d02996d806e 100644 --- a/llvm/test/Transforms/SROA/readonlynocapture.ll +++ b/llvm/test/Transforms/SROA/readonlynocapture.ll @@ -8,7 +8,8 @@ define i32 @simple() { ; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 ; CHECK-NEXT: store i32 0, ptr [[A]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) -; CHECK-NEXT: ret i32 0 +; CHECK-NEXT: [[L1:%.*]] = load i32, ptr [[A]], align 4 +; CHECK-NEXT: ret i32 [[L1]] ; %a = alloca i32 store i32 0, ptr %a @@ -39,7 +40,9 @@ define i32 @twoalloc() { ; CHECK-NEXT: [[B:%.*]] = getelementptr i32, ptr [[A]], i32 1 ; CHECK-NEXT: store i32 1, ptr [[B]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) -; CHECK-NEXT: [[R:%.*]] = add i32 0, 1 +; CHECK-NEXT: [[L1:%.*]] = load i32, ptr [[A]], align 4 +; CHECK-NEXT: [[L2:%.*]] = load i32, ptr [[B]], align 4 +; CHECK-NEXT: [[R:%.*]] = add i32 [[L1]], [[L2]] ; CHECK-NEXT: ret i32 [[R]] ; %a = alloca {i32, i32} @@ -59,7 +62,8 @@ define i32 @twostore() { ; CHECK-NEXT: store i32 1, ptr [[A]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) ; CHECK-NEXT: store i32 2, ptr [[A]], align 4 -; CHECK-NEXT: ret i32 2 +; CHECK-NEXT: [[L:%.*]] = load i32, ptr [[A]], align 4 +; CHECK-NEXT: ret i32 [[L]] ; %a = alloca i32 store i32 1, ptr %a @@ -112,8 +116,10 @@ define i32 @twocalls() { ; CHECK-NEXT: [[B:%.*]] = getelementptr i32, ptr [[A]], i32 1 ; CHECK-NEXT: store i32 1, ptr [[B]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) +; CHECK-NEXT: [[L1:%.*]] = load i32, ptr [[A]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) -; CHECK-NEXT: [[R:%.*]] = add i32 0, 1 +; CHECK-NEXT: [[L2:%.*]] = load i32, ptr [[B]], align 4 +; CHECK-NEXT: [[R:%.*]] = add i32 [[L1]], [[L2]] ; CHECK-NEXT: ret i32 [[R]] ; %a = alloca {i32, i32} @@ -159,7 +165,8 @@ define i32 @atomic() { ; CHECK-NEXT: store i32 1, ptr [[B]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) ; CHECK-NEXT: [[L1:%.*]] = load atomic i32, ptr [[A]] seq_cst, align 4 -; CHECK-NEXT: [[R:%.*]] = add i32 [[L1]], 1 +; CHECK-NEXT: [[L2:%.*]] = load i32, ptr [[B]], align 4 +; CHECK-NEXT: [[R:%.*]] = add i32 [[L1]], [[L2]] ; CHECK-NEXT: ret i32 [[R]] ; %a = alloca {i32, i32} @@ -177,10 +184,12 @@ define i32 @notdominating() { ; CHECK-LABEL: @notdominating( ; CHECK-NEXT: [[A:%.*]] = alloca { i32, i32 }, align 8 ; CHECK-NEXT: [[B:%.*]] = getelementptr i32, ptr [[A]], i32 1 +; CHECK-NEXT: [[L1:%.*]] = load i32, ptr [[A]], align 4 +; CHECK-NEXT: [[L2:%.*]] = load i32, ptr [[B]], align 4 ; CHECK-NEXT: store i32 0, ptr [[A]], align 4 ; CHECK-NEXT: store i32 1, ptr [[B]], align 4 ; CHECK-NEXT: call void @callee(ptr [[A]]) -; CHECK-NEXT: [[R:%.*]] = add i32 undef, undef +; CHECK-NEXT: [[R:%.*]] = add i32 [[L1]], [[L2]] ; CHECK-NEXT: ret i32 [[R]] ; %a = alloca {i32, i32} @@ -226,7 +235,9 @@ define i32 @multiuse() { ; CHECK-NEXT: [[B:%.*]] = getelementptr i32, ptr [[A]], i32 1 ; CHECK-NEXT: store i32 1, ptr [[B]], align 4 ; CHECK-NEXT: call void @callee_multiuse(ptr [[A]], ptr [[A]]) -; CHECK-NEXT: [[R:%.*]] = add i32 0, 1 +; CHECK-NEXT: [[L1:%.*]] = load i32, ptr [[A]], align 4 +; CHECK-NEXT: [[L2:%.*]] = load i32, ptr [[B]], align 4 +; CHECK-NEXT: [[R:%.*]] = add i32 [[L1]], [[L2]] ; CHECK-NEXT: ret i32 [[R]] ; %a = alloca {i32, i32} @@ -285,7 +296,8 @@ define void @incompletestruct(i1 %b, i1 %c) { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[LII:%.*]] = alloca [[STRUCT_LOADIMMEDIATEINFO:%.*]], align 4 ; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[LII]]) -; CHECK-NEXT: [[BF_CLEAR4:%.*]] = and i32 undef, -262144 +; CHECK-NEXT: [[BF_LOAD:%.*]] = load i32, ptr [[LII]], align 4 +; CHECK-NEXT: [[BF_CLEAR4:%.*]] = and i32 [[BF_LOAD]], -262144 ; CHECK-NEXT: [[BF_SET5:%.*]] = select i1 [[B:%.*]], i32 196608, i32 131072 ; CHECK-NEXT: [[BF_SET12:%.*]] = or disjoint i32 [[BF_SET5]], [[BF_CLEAR4]] ; CHECK-NEXT: store i32 [[BF_SET12]], ptr [[LII]], align 4 @@ -313,7 +325,8 @@ define void @incompletestruct_bb(i1 %b, i1 %c) { ; CHECK-NEXT: br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] ; CHECK: if.then: ; CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[LII]]) -; CHECK-NEXT: [[BF_CLEAR4:%.*]] = and i32 undef, -262144 +; CHECK-NEXT: [[BF_LOAD:%.*]] = load i32, ptr [[LII]], align 4 +; CHECK-NEXT: [[BF_CLEAR4:%.*]] = and i32 [[BF_LOAD]], -262144 ; CHECK-NEXT: [[BF_SET5:%.*]] = select i1 [[B:%.*]], i32 196608, i32 131072 ; CHECK-NEXT: [[BF_SET12:%.*]] = or disjoint i32 [[BF_SET5]], [[BF_CLEAR4]] ; CHECK-NEXT: store i32 [[BF_SET12]], ptr [[LII]], align 4 -- cgit v1.2.3 From bd40421ad9ec5ecc164f8208caf3ba5657977e17 Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Thu, 12 Dec 2024 15:39:10 -0600 Subject: [libc] Stop installing `sys/types.h` when not requested (#119765) Summary: This is installed unconditionally because of the dependency in the `hdr/` directory. Remove this so it's only used on the systems that need it. --- libc/hdr/types/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/libc/hdr/types/CMakeLists.txt b/libc/hdr/types/CMakeLists.txt index 68a0e9603f97..ce3ecefe3643 100644 --- a/libc/hdr/types/CMakeLists.txt +++ b/libc/hdr/types/CMakeLists.txt @@ -137,7 +137,6 @@ add_proxy_header_library( clockid_t.h FULL_BUILD_DEPENDS libc.include.llvm-libc-types.clockid_t - libc.include.sys_types ) add_proxy_header_library( @@ -173,7 +172,6 @@ add_proxy_header_library( pid_t.h FULL_BUILD_DEPENDS libc.include.llvm-libc-types.pid_t - libc.include.sys_types ) add_proxy_header_library( -- cgit v1.2.3 From 05137cc50726c82b6cd7bdd51ab44b6db2176ce9 Mon Sep 17 00:00:00 2001 From: Pedro Lobo Date: Thu, 12 Dec 2024 21:44:10 +0000 Subject: [AsmParser] Convert empty arrays to `poison` (#119754) Empty arrays can be converted to `poison` instead of `undef`. --- llvm/lib/AsmParser/LLParser.cpp | 2 +- llvm/test/Assembler/aggregate-constant-values.ll | 2 +- llvm/test/CodeGen/AMDGPU/amdgpu.private-memory.ll | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 34311499367b..558ab3af6321 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -6185,7 +6185,7 @@ bool LLParser::convertValIDToValue(Type *Ty, ValID &ID, Value *&V, case ValID::t_EmptyArray: if (!Ty->isArrayTy() || cast(Ty)->getNumElements() != 0) return error(ID.Loc, "invalid empty array initializer"); - V = UndefValue::get(Ty); + V = PoisonValue::get(Ty); return false; case ValID::t_Zero: // FIXME: LabelTy should not be a first-class type. diff --git a/llvm/test/Assembler/aggregate-constant-values.ll b/llvm/test/Assembler/aggregate-constant-values.ll index 3ae356b55dff..b208b582a465 100644 --- a/llvm/test/Assembler/aggregate-constant-values.ll +++ b/llvm/test/Assembler/aggregate-constant-values.ll @@ -26,7 +26,7 @@ define void @bar(ptr %x) nounwind { } ; CHECK: @bar_empty -; CHECK: store [0 x i32] undef, ptr %x +; CHECK: store [0 x i32] poison, ptr %x ; CHECK: ret define void @bar_empty(ptr %x) nounwind { store [0 x i32][], ptr %x diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu.private-memory.ll b/llvm/test/CodeGen/AMDGPU/amdgpu.private-memory.ll index c1a957dec3e8..82832277b1ab 100644 --- a/llvm/test/CodeGen/AMDGPU/amdgpu.private-memory.ll +++ b/llvm/test/CodeGen/AMDGPU/amdgpu.private-memory.ll @@ -504,7 +504,7 @@ define amdgpu_kernel void @v2float_stack(ptr addrspace(1) %out, i32 %a) { } ; OPT-LABEL: @direct_alloca_read_0xi32( -; OPT: store [0 x i32] undef, ptr addrspace(3) +; OPT: store [0 x i32] poison, ptr addrspace(3) ; OPT: load [0 x i32], ptr addrspace(3) define amdgpu_kernel void @direct_alloca_read_0xi32(ptr addrspace(1) %out, i32 %index) { entry: -- cgit v1.2.3 From 81dcbefba3901545d3aef79f7030d45e81e798be Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Thu, 12 Dec 2024 17:01:46 -0500 Subject: [libc++] Add testing configurations for libstdc++ and a native stdlib (#98539) This allows running the test suite against the native Standard Library on most systems, and against libstdc++ installed at a custom location. Of course, these configurations don't run 100% clean at the moment. In particular, running against the native stdlib is almost guaranteed not to work out-of-the-box, since the test suite generally contains tests for things that have been implemented on tip-of-trunk but not released to most major platforms yet. However, having an easy way to run the test suite against that library is still both useful and interesting. --- libcxx/test/configs/stdlib-libstdc++.cfg.in | 64 +++++++++++++++++++++++++++++ libcxx/test/configs/stdlib-native.cfg.in | 24 +++++++++++ 2 files changed, 88 insertions(+) create mode 100644 libcxx/test/configs/stdlib-libstdc++.cfg.in create mode 100644 libcxx/test/configs/stdlib-native.cfg.in diff --git a/libcxx/test/configs/stdlib-libstdc++.cfg.in b/libcxx/test/configs/stdlib-libstdc++.cfg.in new file mode 100644 index 000000000000..d89254ab47d6 --- /dev/null +++ b/libcxx/test/configs/stdlib-libstdc++.cfg.in @@ -0,0 +1,64 @@ +# +# This testing configuration runs the test suite using the libstdc++ Standard library. +# +# The additional '--param libstdcxx-install-prefix=', '--param libstdcxx-triple=' and +# '--param libstdcxx-version=' lit parameters must be provided when invoking lit for the +# configuration to find the appropriate headers and library. +# +# For example: +# +# $ ./libcxx/utils/libcxx-lit -sv libcxx/test/std --param libstdcxx-install-prefix=/opt/homebrew/Cellar/gcc/14.1.0_1 \ +# --param libstdcxx-version=14 \ +# --param libstdcxx-triple=aarch64-apple-darwin22 +# + +lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') + +import os, site +site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils')) +import libcxx.test.params, libcxx.test.config, libcxx.test.dsl + +# Additional parameters for libstdc++ +LIBSTDCXX_PARAMETERS = [ + libcxx.test.dsl.Parameter(name='libstdcxx-install-prefix', type=str, + actions=lambda path: [libcxx.test.dsl.AddSubstitution('%{libstdcxx-install-prefix}', path)], + help=""" + The installation prefix where libstdc++ was installed. This is used to find the libstdc++ headers, + link against its built library, etc. + """), + libcxx.test.dsl.Parameter(name='libstdcxx-triple', type=str, + actions=lambda triple: [libcxx.test.dsl.AddSubstitution('%{libstdcxx-triple}', triple)], + help=""" + The target triple used for the target-specific include directory of libstdc++. This is used to find the + libstdc++ headers. + """), + libcxx.test.dsl.Parameter(name='libstdcxx-version', type=str, + actions=lambda version: [libcxx.test.dsl.AddSubstitution('%{libstdcxx-version}', version)], + help=""" + The version of libstdc++. This is used to find the libstdc++ headers and library. + """), +] + +# Configure the compiler and flags +config.substitutions.append(('%{flags}', + '-pthread' + (' -isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else '') +)) +config.substitutions.append(('%{compile_flags}', + '-nostdinc++ -isystem %{libstdcxx-install-prefix}/include/c++/%{libstdcxx-version} -isystem %{libstdcxx-install-prefix}/include/c++/%{libstdcxx-version}/%{libstdcxx-triple} -I %{libcxx-dir}/test/support' +)) +config.substitutions.append(('%{link_flags}', + '-nostdlib++ -L %{libstdcxx-install-prefix}/lib/gcc/%{libstdcxx-version} -Wl,-rpath,%{libstdcxx-install-prefix}/lib/gcc/%{libstdcxx-version} -lstdc++' +)) +config.substitutions.append(('%{exec}', + '%{executor} --execdir %T -- ' +)) + +import os, site +site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils')) +import libcxx.test.params, libcxx.test.config +libcxx.test.config.configure( + libcxx.test.params.DEFAULT_PARAMETERS + LIBSTDCXX_PARAMETERS, + libcxx.test.features.DEFAULT_FEATURES, + config, + lit_config +) diff --git a/libcxx/test/configs/stdlib-native.cfg.in b/libcxx/test/configs/stdlib-native.cfg.in new file mode 100644 index 000000000000..3e25c1eedb3f --- /dev/null +++ b/libcxx/test/configs/stdlib-native.cfg.in @@ -0,0 +1,24 @@ +# +# This testing configuration handles running the test suite against the +# native C++ Standard Library, i.e. whatever standard library is used by +# default when no special compiler flags are provided. +# + +lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') + +config.substitutions.append(('%{flags}', + '-pthread' + (' -isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else '') +)) +config.substitutions.append(('%{compile_flags}', '-I %{libcxx-dir}/test/support')) +config.substitutions.append(('%{link_flags}', '')) +config.substitutions.append(('%{exec}', '%{executor} --execdir %T -- ')) + +import os, site +site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils')) +import libcxx.test.params, libcxx.test.config +libcxx.test.config.configure( + libcxx.test.params.DEFAULT_PARAMETERS, + libcxx.test.features.DEFAULT_FEATURES, + config, + lit_config +) -- cgit v1.2.3 From d1dff1dc18f6087a89e94866fe474d0be228b7cf Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Thu, 12 Dec 2024 22:33:00 +0000 Subject: [LV] Remove hard-coded VPValue numbers in test check lines. (NFC) Make tests independent of VPlan value numbers. --- .../LoopVectorize/AArch64/fully-unrolled-cost.ll | 4 +- .../Transforms/LoopVectorize/ARM/mve-icmpcost.ll | 120 ++++++++++----------- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/fully-unrolled-cost.ll b/llvm/test/Transforms/LoopVectorize/AArch64/fully-unrolled-cost.ll index f5ffc731eac8..1cfb507a7434 100644 --- a/llvm/test/Transforms/LoopVectorize/AArch64/fully-unrolled-cost.ll +++ b/llvm/test/Transforms/LoopVectorize/AArch64/fully-unrolled-cost.ll @@ -81,11 +81,11 @@ define i64 @test_two_ivs(ptr %a, ptr %b, i64 %start) #0 { ; CHECK-NEXT: Cost of 1 for VF 8: induction instruction %j.iv.next = add nuw nsw i64 %j.iv, 1 ; CHECK-NEXT: Cost of 0 for VF 8: induction instruction %j.iv = phi i64 [ %start, %entry ], [ %j.iv.next, %for.body ] ; CHECK-NEXT: Cost of 1 for VF 8: exit condition instruction %exitcond.not = icmp eq i64 %i.iv.next, 16 -; CHECK-NEXT: Cost of 0 for VF 8: EMIT vp<%2> = CANONICAL-INDUCTION ir<0>, vp<%index.next> +; CHECK-NEXT: Cost of 0 for VF 8: EMIT vp<{{.+}}> = CANONICAL-INDUCTION ir<0>, vp<%index.next> ; CHECK: Cost for VF 8: 27 ; CHECK-NEXT: Cost of 0 for VF 16: induction instruction %i.iv = phi i64 [ 0, %entry ], [ %i.iv.next, %for.body ] ; CHECK-NEXT: Cost of 0 for VF 16: induction instruction %j.iv = phi i64 [ %start, %entry ], [ %j.iv.next, %for.body ] -; CHECK-NEXT: Cost of 0 for VF 16: EMIT vp<%2> = CANONICAL-INDUCTION ir<0>, vp<%index.next> +; CHECK-NEXT: Cost of 0 for VF 16: EMIT vp<{{.+}}> = CANONICAL-INDUCTION ir<0>, vp<%index.next> ; CHECK: Cost for VF 16: 48 ; CHECK: LV: Selecting VF: 16 entry: diff --git a/llvm/test/Transforms/LoopVectorize/ARM/mve-icmpcost.ll b/llvm/test/Transforms/LoopVectorize/ARM/mve-icmpcost.ll index 57bc21093ca9..7b18e5cc1da7 100644 --- a/llvm/test/Transforms/LoopVectorize/ARM/mve-icmpcost.ll +++ b/llvm/test/Transforms/LoopVectorize/ARM/mve-icmpcost.ll @@ -135,28 +135,28 @@ for.inc: ; preds = %for.body, %if.then ; CHECK: Cost of 0 for VF 2: induction instruction %incdec.ptr2 = getelementptr inbounds i8, ptr %pSrcB.addr.09, i32 1 ; CHECK: Cost of 0 for VF 2: induction instruction %pSrcB.addr.09 = phi ptr [ %incdec.ptr2, %while.body ], [ %pSrcB, %while.body.preheader ] ; CHECK: Cost of 1 for VF 2: exit condition instruction %cmp.not = icmp eq i32 %dec, 0 -; CHECK: Cost of 0 for VF 2: EMIT vp<%2> = CANONICAL-INDUCTION ir<0>, vp<%index.next> -; CHECK: Cost of 0 for VF 2: vp<%3> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 2: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<%3> -; CHECK: Cost of 0 for VF 2: vp<%4> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 2: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<%4> -; CHECK: Cost of 0 for VF 2: vp<%5> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 2: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<%5> -; CHECK: Cost of 0 for VF 2: vp<%6> = vector-pointer vp<%next.gep> -; CHECK: Cost of 18 for VF 2: WIDEN ir<%0> = load vp<%6> +; CHECK: Cost of 0 for VF 2: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION ir<0>, vp<%index.next> +; CHECK: Cost of 0 for VF 2: vp<[[STEPS1:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 2: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<[[STEPS1]]> +; CHECK: Cost of 0 for VF 2: vp<[[STEPS2:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 2: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<[[STEPS2]]> +; CHECK: Cost of 0 for VF 2: vp<[[STEPS3:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 2: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<[[STEPS3]]> +; CHECK: Cost of 0 for VF 2: vp<[[VEC_PTR:%.+]]> = vector-pointer vp<%next.gep> +; CHECK: Cost of 18 for VF 2: WIDEN ir<%0> = load vp<[[VEC_PTR]]> ; CHECK: Cost of 4 for VF 2: WIDEN-CAST ir<%conv1> = sext ir<%0> to i32 -; CHECK: Cost of 0 for VF 2: vp<%7> = vector-pointer vp<%next.gep>.2 -; CHECK: Cost of 18 for VF 2: WIDEN ir<%1> = load vp<%7> +; CHECK: Cost of 0 for VF 2: vp<[[VEC_PTR2:%.+]]> = vector-pointer vp<%next.gep>.2 +; CHECK: Cost of 18 for VF 2: WIDEN ir<%1> = load vp<[[VEC_PTR2]]> ; CHECK: Cost of 4 for VF 2: WIDEN-CAST ir<%conv3> = sext ir<%1> to i32 ; CHECK: Cost of 26 for VF 2: WIDEN ir<%mul> = mul nsw ir<%conv3>, ir<%conv1> ; CHECK: Cost of 18 for VF 2: WIDEN ir<%shr> = ashr ir<%mul>, ir<7> ; CHECK: Cost of 0 for VF 2: WIDEN ir<%2> = icmp slt ir<%shr>, ir<127> ; CHECK: Cost of 22 for VF 2: WIDEN-SELECT ir<%spec.select.i> = select ir<%2>, ir<%shr>, ir<127> ; CHECK: Cost of 0 for VF 2: WIDEN-CAST ir<%conv4> = trunc ir<%spec.select.i> to i8 -; CHECK: Cost of 0 for VF 2: vp<%8> = vector-pointer vp<%next.gep>.1 -; CHECK: Cost of 18 for VF 2: WIDEN store vp<%8>, ir<%conv4> -; CHECK: Cost of 0 for VF 2: EMIT vp<%index.next> = add nuw vp<%2>, vp<%0> -; CHECK: Cost of 0 for VF 2: EMIT branch-on-count vp<%index.next>, vp<%1> +; CHECK: Cost of 0 for VF 2: vp<[[VEC_PTR3:%.+]]> = vector-pointer vp<%next.gep>.1 +; CHECK: Cost of 18 for VF 2: WIDEN store vp<[[VEC_PTR3]]>, ir<%conv4> +; CHECK: Cost of 0 for VF 2: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<%0> +; CHECK: Cost of 0 for VF 2: EMIT branch-on-count vp<%index.next>, vp<{{.+}}> ; CHECK: Cost for VF 2: 130 (Estimated cost per lane: 65. ; CHECK: Cost of 1 for VF 4: induction instruction %dec = add i32 %blkCnt.012, -1 ; CHECK: Cost of 0 for VF 4: induction instruction %blkCnt.012 = phi i32 [ %dec, %while.body ], [ %blockSize, %while.body.preheader ] @@ -167,28 +167,28 @@ for.inc: ; preds = %for.body, %if.then ; CHECK: Cost of 0 for VF 4: induction instruction %incdec.ptr2 = getelementptr inbounds i8, ptr %pSrcB.addr.09, i32 1 ; CHECK: Cost of 0 for VF 4: induction instruction %pSrcB.addr.09 = phi ptr [ %incdec.ptr2, %while.body ], [ %pSrcB, %while.body.preheader ] ; CHECK: Cost of 1 for VF 4: exit condition instruction %cmp.not = icmp eq i32 %dec, 0 -; CHECK: Cost of 0 for VF 4: EMIT vp<%2> = CANONICAL-INDUCTION ir<0>, vp<%index.next> -; CHECK: Cost of 0 for VF 4: vp<%3> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 4: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<%3> -; CHECK: Cost of 0 for VF 4: vp<%4> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 4: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<%4> -; CHECK: Cost of 0 for VF 4: vp<%5> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 4: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<%5> -; CHECK: Cost of 0 for VF 4: vp<%6> = vector-pointer vp<%next.gep> -; CHECK: Cost of 2 for VF 4: WIDEN ir<%0> = load vp<%6> +; CHECK: Cost of 0 for VF 4: EMIT vp<[[CAN_IV:%.]]> = CANONICAL-INDUCTION ir<0>, vp<%index.next> +; CHECK: Cost of 0 for VF 4: vp<[[STEPS1:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 4: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<[[STEPS1]]> +; CHECK: Cost of 0 for VF 4: vp<[[STEPS2:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 4: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<[[STEPS2]]> +; CHECK: Cost of 0 for VF 4: vp<[[STEPS3:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 4: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<[[STEPS3]]> +; CHECK: Cost of 0 for VF 4: vp<[[VEC_PTR1:%.+]]> = vector-pointer vp<%next.gep> +; CHECK: Cost of 2 for VF 4: WIDEN ir<%0> = load vp<[[VEC_PTR1]]> ; CHECK: Cost of 0 for VF 4: WIDEN-CAST ir<%conv1> = sext ir<%0> to i32 -; CHECK: Cost of 0 for VF 4: vp<%7> = vector-pointer vp<%next.gep>.2 -; CHECK: Cost of 2 for VF 4: WIDEN ir<%1> = load vp<%7> +; CHECK: Cost of 0 for VF 4: vp<[[VEC_PTR2:%.+]]> = vector-pointer vp<%next.gep>.2 +; CHECK: Cost of 2 for VF 4: WIDEN ir<%1> = load vp<[[VEC_PTR2]]> ; CHECK: Cost of 0 for VF 4: WIDEN-CAST ir<%conv3> = sext ir<%1> to i32 ; CHECK: Cost of 2 for VF 4: WIDEN ir<%mul> = mul nsw ir<%conv3>, ir<%conv1> ; CHECK: Cost of 2 for VF 4: WIDEN ir<%shr> = ashr ir<%mul>, ir<7> ; CHECK: Cost of 0 for VF 4: WIDEN ir<%2> = icmp slt ir<%shr>, ir<127> ; CHECK: Cost of 2 for VF 4: WIDEN-SELECT ir<%spec.select.i> = select ir<%2>, ir<%shr>, ir<127> ; CHECK: Cost of 0 for VF 4: WIDEN-CAST ir<%conv4> = trunc ir<%spec.select.i> to i8 -; CHECK: Cost of 0 for VF 4: vp<%8> = vector-pointer vp<%next.gep>.1 -; CHECK: Cost of 2 for VF 4: WIDEN store vp<%8>, ir<%conv4> -; CHECK: Cost of 0 for VF 4: EMIT vp<%index.next> = add nuw vp<%2>, vp<%0> -; CHECK: Cost of 0 for VF 4: EMIT branch-on-count vp<%index.next>, vp<%1> +; CHECK: Cost of 0 for VF 4: vp<[[VEC_PTR2:%.+]]> = vector-pointer vp<%next.gep>.1 +; CHECK: Cost of 2 for VF 4: WIDEN store vp<[[VEC_PTR2]]>, ir<%conv4> +; CHECK: Cost of 0 for VF 4: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<%0> +; CHECK: Cost of 0 for VF 4: EMIT branch-on-count vp<%index.next>, vp<{{.+}}> ; CHECK: Cost for VF 4: 14 (Estimated cost per lane: 3. ; CHECK: Cost of 1 for VF 8: induction instruction %dec = add i32 %blkCnt.012, -1 ; CHECK: Cost of 0 for VF 8: induction instruction %blkCnt.012 = phi i32 [ %dec, %while.body ], [ %blockSize, %while.body.preheader ] @@ -199,28 +199,28 @@ for.inc: ; preds = %for.body, %if.then ; CHECK: Cost of 0 for VF 8: induction instruction %incdec.ptr2 = getelementptr inbounds i8, ptr %pSrcB.addr.09, i32 1 ; CHECK: Cost of 0 for VF 8: induction instruction %pSrcB.addr.09 = phi ptr [ %incdec.ptr2, %while.body ], [ %pSrcB, %while.body.preheader ] ; CHECK: Cost of 1 for VF 8: exit condition instruction %cmp.not = icmp eq i32 %dec, 0 -; CHECK: Cost of 0 for VF 8: EMIT vp<%2> = CANONICAL-INDUCTION ir<0>, vp<%index.next> -; CHECK: Cost of 0 for VF 8: vp<%3> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 8: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<%3> -; CHECK: Cost of 0 for VF 8: vp<%4> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 8: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<%4> -; CHECK: Cost of 0 for VF 8: vp<%5> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 8: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<%5> -; CHECK: Cost of 0 for VF 8: vp<%6> = vector-pointer vp<%next.gep> -; CHECK: Cost of 2 for VF 8: WIDEN ir<%0> = load vp<%6> +; CHECK: Cost of 0 for VF 8: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION ir<0>, vp<%index.next> +; CHECK: Cost of 0 for VF 8: vp<[[STEPS1:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 8: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<[[STEPS1]]> +; CHECK: Cost of 0 for VF 8: vp<[[STEPS2:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 8: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<[[STEPS2]]> +; CHECK: Cost of 0 for VF 8: vp<[[STEPS3:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 8: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<[[STEPS3]]> +; CHECK: Cost of 0 for VF 8: vp<[[VEC_PTR1:%.+]]> = vector-pointer vp<%next.gep> +; CHECK: Cost of 2 for VF 8: WIDEN ir<%0> = load vp<[[VEC_PTR1]]> ; CHECK: Cost of 2 for VF 8: WIDEN-CAST ir<%conv1> = sext ir<%0> to i32 -; CHECK: Cost of 0 for VF 8: vp<%7> = vector-pointer vp<%next.gep>.2 -; CHECK: Cost of 2 for VF 8: WIDEN ir<%1> = load vp<%7> +; CHECK: Cost of 0 for VF 8: vp<[[VEC_PTR2:%.+]]> = vector-pointer vp<%next.gep>.2 +; CHECK: Cost of 2 for VF 8: WIDEN ir<%1> = load vp<[[VEC_PTR2]]> ; CHECK: Cost of 2 for VF 8: WIDEN-CAST ir<%conv3> = sext ir<%1> to i32 ; CHECK: Cost of 4 for VF 8: WIDEN ir<%mul> = mul nsw ir<%conv3>, ir<%conv1> ; CHECK: Cost of 4 for VF 8: WIDEN ir<%shr> = ashr ir<%mul>, ir<7> ; CHECK: Cost of 0 for VF 8: WIDEN ir<%2> = icmp slt ir<%shr>, ir<127> ; CHECK: Cost of 4 for VF 8: WIDEN-SELECT ir<%spec.select.i> = select ir<%2>, ir<%shr>, ir<127> ; CHECK: Cost of 2 for VF 8: WIDEN-CAST ir<%conv4> = trunc ir<%spec.select.i> to i8 -; CHECK: Cost of 0 for VF 8: vp<%8> = vector-pointer vp<%next.gep>.1 -; CHECK: Cost of 2 for VF 8: WIDEN store vp<%8>, ir<%conv4> -; CHECK: Cost of 0 for VF 8: EMIT vp<%index.next> = add nuw vp<%2>, vp<%0> -; CHECK: Cost of 0 for VF 8: EMIT branch-on-count vp<%index.next>, vp<%1> +; CHECK: Cost of 0 for VF 8: vp<[[VEC_PTR3:%.+]]> = vector-pointer vp<%next.gep>.1 +; CHECK: Cost of 2 for VF 8: WIDEN store vp<[[VEC_PTR3]]>, ir<%conv4> +; CHECK: Cost of 0 for VF 8: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<{{.+}} +; CHECK: Cost of 0 for VF 8: EMIT branch-on-count vp<%index.next>, vp<{{.+}}> ; CHECK: Cost for VF 8: 26 (Estimated cost per lane: 3. ; CHECK: Cost of 1 for VF 16: induction instruction %dec = add i32 %blkCnt.012, -1 ; CHECK: Cost of 0 for VF 16: induction instruction %blkCnt.012 = phi i32 [ %dec, %while.body ], [ %blockSize, %while.body.preheader ] @@ -231,28 +231,28 @@ for.inc: ; preds = %for.body, %if.then ; CHECK: Cost of 0 for VF 16: induction instruction %incdec.ptr2 = getelementptr inbounds i8, ptr %pSrcB.addr.09, i32 1 ; CHECK: Cost of 0 for VF 16: induction instruction %pSrcB.addr.09 = phi ptr [ %incdec.ptr2, %while.body ], [ %pSrcB, %while.body.preheader ] ; CHECK: Cost of 1 for VF 16: exit condition instruction %cmp.not = icmp eq i32 %dec, 0 -; CHECK: Cost of 0 for VF 16: EMIT vp<%2> = CANONICAL-INDUCTION ir<0>, vp<%index.next> -; CHECK: Cost of 0 for VF 16: vp<%3> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 16: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<%3> -; CHECK: Cost of 0 for VF 16: vp<%4> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 16: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<%4> -; CHECK: Cost of 0 for VF 16: vp<%5> = SCALAR-STEPS vp<%2>, ir<1> -; CHECK: Cost of 0 for VF 16: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<%5> -; CHECK: Cost of 0 for VF 16: vp<%6> = vector-pointer vp<%next.gep> -; CHECK: Cost of 2 for VF 16: WIDEN ir<%0> = load vp<%6> +; CHECK: Cost of 0 for VF 16: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION ir<0>, vp<%index.next> +; CHECK: Cost of 0 for VF 16: vp<[[STEPS1:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 16: EMIT vp<%next.gep> = ptradd ir<%pSrcA>, vp<[[STEPS1]]> +; CHECK: Cost of 0 for VF 16: vp<[[STEPS2:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 16: EMIT vp<%next.gep>.1 = ptradd ir<%pDst>, vp<[[STEPS2]]> +; CHECK: Cost of 0 for VF 16: vp<[[STEPS3:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1> +; CHECK: Cost of 0 for VF 16: EMIT vp<%next.gep>.2 = ptradd ir<%pSrcB>, vp<[[STEPS3]]> +; CHECK: Cost of 0 for VF 16: vp<[[VEC_PTR:%.+]]> = vector-pointer vp<%next.gep> +; CHECK: Cost of 2 for VF 16: WIDEN ir<%0> = load vp<[[VEC_PTR]]> ; CHECK: Cost of 6 for VF 16: WIDEN-CAST ir<%conv1> = sext ir<%0> to i32 -; CHECK: Cost of 0 for VF 16: vp<%7> = vector-pointer vp<%next.gep>.2 -; CHECK: Cost of 2 for VF 16: WIDEN ir<%1> = load vp<%7> +; CHECK: Cost of 0 for VF 16: vp<[[VEC_PTR1:%.+]]> = vector-pointer vp<%next.gep>.2 +; CHECK: Cost of 2 for VF 16: WIDEN ir<%1> = load vp<[[VEC_PTR1]]> ; CHECK: Cost of 6 for VF 16: WIDEN-CAST ir<%conv3> = sext ir<%1> to i32 ; CHECK: Cost of 8 for VF 16: WIDEN ir<%mul> = mul nsw ir<%conv3>, ir<%conv1> ; CHECK: Cost of 8 for VF 16: WIDEN ir<%shr> = ashr ir<%mul>, ir<7> ; CHECK: Cost of 0 for VF 16: WIDEN ir<%2> = icmp slt ir<%shr>, ir<127> ; CHECK: Cost of 8 for VF 16: WIDEN-SELECT ir<%spec.select.i> = select ir<%2>, ir<%shr>, ir<127> ; CHECK: Cost of 6 for VF 16: WIDEN-CAST ir<%conv4> = trunc ir<%spec.select.i> to i8 -; CHECK: Cost of 0 for VF 16: vp<%8> = vector-pointer vp<%next.gep>.1 -; CHECK: Cost of 2 for VF 16: WIDEN store vp<%8>, ir<%conv4> -; CHECK: Cost of 0 for VF 16: EMIT vp<%index.next> = add nuw vp<%2>, vp<%0> -; CHECK: Cost of 0 for VF 16: EMIT branch-on-count vp<%index.next>, vp<%1> +; CHECK: Cost of 0 for VF 16: vp<[[VEC_PTR2:%.+]]> = vector-pointer vp<%next.gep>.1 +; CHECK: Cost of 2 for VF 16: WIDEN store vp<[[VEC_PTR2]]>, ir<%conv4> +; CHECK: Cost of 0 for VF 16: EMIT vp<%index.next> = add nuw vp<[[CAN_IV]]>, vp<{{.+}}> +; CHECK: Cost of 0 for VF 16: EMIT branch-on-count vp<%index.next>, vp<{{.+}}> ; CHECK: Cost for VF 16: 50 ; CHECK: LV: Selecting VF: 16. define void @cheap_icmp(ptr nocapture readonly %pSrcA, ptr nocapture readonly %pSrcB, ptr nocapture %pDst, i32 %blockSize) #0 { -- cgit v1.2.3 From 80cd9e4265a8e3e0a6fc90dfe9815f6958ba0b9a Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 12 Dec 2024 14:41:57 -0800 Subject: [RISCV] Move GIComplexOperandMatcher and GICustomOperandRenderer next to their SelectionDAG equivalents. NFC (#119729) This makes it easier to see if the SelectionDAG node has an equivalent without needing to check another file. Putting them in the same file also helps associate them with the relevant ISA and any additional context that may be provided by comments. Naming is a little messy because we inconsistently use camel case and snake case in the SelectionDAG node names. Thus the GISel node names are named the same as the SelectionDAG node name with either GI or gi_ as a prefix. --- llvm/lib/Target/RISCV/RISCVGISel.td | 60 ------------------------- llvm/lib/Target/RISCV/RISCVInstrInfo.td | 35 +++++++++++++++ llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td | 7 +++ llvm/lib/Target/RISCV/RISCVInstrInfoZb.td | 13 ++++++ 4 files changed, 55 insertions(+), 60 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVGISel.td b/llvm/lib/Target/RISCV/RISCVGISel.td index f9c17cf5eed5..5045e5eaa940 100644 --- a/llvm/lib/Target/RISCV/RISCVGISel.td +++ b/llvm/lib/Target/RISCV/RISCVGISel.td @@ -33,70 +33,10 @@ def simm12Minus1NonzeroNonNeg1 : ImmLeafgetTargetConstant(N->getSExtValue() + 1, SDLoc(N), N->getValuePtrVTpe(0));}]>; - -def GINegImm : GICustomOperandRenderer<"renderNegImm">, - GISDNodeXFormEquiv; - -def GIImmSubFromXLen : GICustomOperandRenderer<"renderImmSubFromXLen">, - GISDNodeXFormEquiv; -def GIImmSubFrom32 : GICustomOperandRenderer<"renderImmSubFrom32">, - GISDNodeXFormEquiv; - def GIImmPlus1 : GICustomOperandRenderer<"renderImmPlus1">, GISDNodeXFormEquiv; -def GIAddrRegImm : - GIComplexOperandMatcher, - GIComplexPatternEquiv; - -// FIXME: This is labelled as handling 's32', however the ComplexPattern it -// refers to handles both i32 and i64 based on the HwMode. Currently this LLT -// parameter appears to be ignored so this pattern works for both, however we -// should add a LowLevelTypeByHwMode, and use that to define our XLenLLT instead -// here. -def GIVLOp : GIComplexOperandMatcher, - GIComplexPatternEquiv; - -def gi_trailing_zero : GICustomOperandRenderer<"renderTrailingZeros">, - GISDNodeXFormEquiv; - -// FIXME: This is labelled as handling 's32', however the ComplexPattern it -// refers to handles both i32 and i64 based on the HwMode. Currently this LLT -// parameter appears to be ignored so this pattern works for both, however we -// should add a LowLevelTypeByHwMode, and use that to define our XLenLLT instead -// here. -def GIShiftMaskXLen : - GIComplexOperandMatcher, - GIComplexPatternEquiv; -def GIShiftMask32 : - GIComplexOperandMatcher, - GIComplexPatternEquiv; - -def gi_sh1add_op : GIComplexOperandMatcher">, - GIComplexPatternEquiv; -def gi_sh2add_op : GIComplexOperandMatcher">, - GIComplexPatternEquiv; -def gi_sh3add_op : GIComplexOperandMatcher">, - GIComplexPatternEquiv; - -def gi_sh1add_uw_op : GIComplexOperandMatcher">, - GIComplexPatternEquiv; -def gi_sh2add_uw_op : GIComplexOperandMatcher">, - GIComplexPatternEquiv; -def gi_sh3add_uw_op : GIComplexOperandMatcher">, - GIComplexPatternEquiv; - -def gi_sexti32 : GIComplexOperandMatcher">, - GIComplexPatternEquiv; - -def gi_zexti32 : GIComplexOperandMatcher">, - GIComplexPatternEquiv; -def gi_zexti16 : GIComplexOperandMatcher">, - GIComplexPatternEquiv; -def gi_zexti8 : GIComplexOperandMatcher">, - GIComplexPatternEquiv; - // Ptr type used in patterns with GlobalISelEmitter def PtrVT : PtrValueTypeByHwMode; diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td index 78682f2609db..2f0d9de42b48 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td @@ -418,6 +418,8 @@ def NegImm : SDNodeXFormgetSignedTargetConstant(-N->getSExtValue(), SDLoc(N), N->getValueType(0)); }]>; +def GINegImm : GICustomOperandRenderer<"renderNegImm">, + GISDNodeXFormEquiv; // Return an immediate value minus 32. def ImmSub32 : SDNodeXFormgetTargetConstant(XLen - N->getZExtValue(), SDLoc(N), N->getValueType(0)); }]>; +def GIImmSubFromXLen : GICustomOperandRenderer<"renderImmSubFromXLen">, + GISDNodeXFormEquiv; // Return an immediate subtracted from 32. def ImmSubFrom32 : SDNodeXFormgetTargetConstant(32 - N->getZExtValue(), SDLoc(N), N->getValueType(0)); }]>; +def GIImmSubFrom32 : GICustomOperandRenderer<"renderImmSubFrom32">, + GISDNodeXFormEquiv; // Check if (add r, imm) can be optimized to (ADDI (ADDI r, imm0), imm1), // in which imm = imm0 + imm1 and both imm0 and imm1 are simm12. We make imm0 @@ -469,6 +475,8 @@ def TrailingZeros : SDNodeXFormgetTargetConstant(llvm::countr_zero(N->getZExtValue()), SDLoc(N), N->getValueType(0)); }]>; +def GITrailingZeros : GICustomOperandRenderer<"renderTrailingZeros">, + GISDNodeXFormEquiv; def XLenSubTrailingOnes : SDNodeXFormgetXLen(); @@ -1267,13 +1275,26 @@ def assertsexti32 : PatFrag<(ops node:$src), (assertsext node:$src), [{ return cast(N->getOperand(1))->getVT().bitsLE(MVT::i32); }]>; def sexti16 : ComplexPattern">; + def sexti32 : ComplexPattern">; +def gi_sexti32 : GIComplexOperandMatcher">, + GIComplexPatternEquiv; + def assertzexti32 : PatFrag<(ops node:$src), (assertzext node:$src), [{ return cast(N->getOperand(1))->getVT().bitsLE(MVT::i32); }]>; + def zexti32 : ComplexPattern">; +def gi_zexti32 : GIComplexOperandMatcher">, + GIComplexPatternEquiv; + def zexti16 : ComplexPattern">; +def gi_zexti16 : GIComplexOperandMatcher">, + GIComplexPatternEquiv; + def zexti8 : ComplexPattern">; +def gi_zexti8 : GIComplexOperandMatcher">, + GIComplexPatternEquiv; def ext : PatFrags<(ops node:$A), [(sext node:$A), (zext node:$A)]>; @@ -1357,6 +1378,17 @@ def : Pat<(XLenVT (and GPR:$rs, TrailingOnesMask:$mask)), // ISA only read the least significant 5 bits (RV32I) or 6 bits (RV64I). def shiftMaskXLen : ComplexPattern; def shiftMask32 : ComplexPattern; +// FIXME: This is labelled as handling 's32', however the ComplexPattern it +// refers to handles both i32 and i64 based on the HwMode. Currently this LLT +// parameter appears to be ignored so this pattern works for both, however we +// should add a LowLevelTypeByHwMode, and use that to define our XLenLLT instead +// here. +def GIShiftMaskXLen : + GIComplexOperandMatcher, + GIComplexPatternEquiv; +def GIShiftMask32 : + GIComplexOperandMatcher, + GIComplexPatternEquiv; class shiftop : PatFrag<(ops node:$val, node:$count), @@ -1382,6 +1414,9 @@ def PseudoAddTPRel : Pseudo<(outs GPR:$rd), def : Pat<(FrameAddrRegImm (iPTR GPR:$rs1), simm12:$imm12), (ADDI GPR:$rs1, simm12:$imm12)>; +def GIAddrRegImm : + GIComplexOperandMatcher, + GIComplexPatternEquiv; /// Stack probing diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index 6c4e41711440..d4770de44aef 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -102,6 +102,13 @@ def vec_rm : RISCVOp { // !X0 | X0 | VLMAX | Set vl to VLMAX // X0 | X0 | Value in vl | Keep current vl, just change vtype. def VLOp : ComplexPattern; +// FIXME: This is labelled as handling 's32', however the ComplexPattern it +// refers to handles both i32 and i64 based on the HwMode. Currently this LLT +// parameter appears to be ignored so this pattern works for both, however we +// should add a LowLevelTypeByHwMode, and use that to define our XLenLLT instead +// here. +def GIVLOp : GIComplexOperandMatcher, + GIComplexPatternEquiv; def DecImm : SDNodeXFormgetSignedTargetConstant(N->getSExtValue() - 1, SDLoc(N), diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td index 8cefceab43e5..a78091cd02a3 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td @@ -213,10 +213,23 @@ def Shifted32OnesMask : IntImmLeaf", [], [], 6>; def sh2add_op : ComplexPattern", [], [], 6>; def sh3add_op : ComplexPattern", [], [], 6>; +def gi_sh1add_op : GIComplexOperandMatcher">, + GIComplexPatternEquiv; +def gi_sh2add_op : GIComplexOperandMatcher">, + GIComplexPatternEquiv; +def gi_sh3add_op : GIComplexOperandMatcher">, + GIComplexPatternEquiv; + def sh1add_uw_op : ComplexPattern", [], [], 6>; def sh2add_uw_op : ComplexPattern", [], [], 6>; def sh3add_uw_op : ComplexPattern", [], [], 6>; +def gi_sh1add_uw_op : GIComplexOperandMatcher">, + GIComplexPatternEquiv; +def gi_sh2add_uw_op : GIComplexOperandMatcher">, + GIComplexPatternEquiv; +def gi_sh3add_uw_op : GIComplexOperandMatcher">, + GIComplexPatternEquiv; //===----------------------------------------------------------------------===// // Instruction class templates -- cgit v1.2.3 From ea04148c27264209fb9b732ec8932aa1f4680764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Clement=20=28=E3=83=90=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=B3=20=E3=82=AF=E3=83=AC=E3=83=A1?= =?UTF-8?q?=E3=83=B3=29?= Date: Thu, 12 Dec 2024 14:52:49 -0800 Subject: [flang][cuda] Extend implicit global handling to any type descriptor (#119769) Relax the check to also handle other type descriptor globals. --- flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp | 36 +++--- .../test/Fir/CUDA/cuda-implicit-device-global.f90 | 130 ++++++++++----------- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp b/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp index 20d47fda3238..9650fb708cdb 100644 --- a/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp +++ b/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp @@ -32,18 +32,17 @@ static constexpr llvm::StringRef builtinPrefix = "_QM__fortran_builtins"; static void processAddrOfOp(fir::AddrOfOp addrOfOp, mlir::SymbolTable &symbolTable, - llvm::DenseSet &candidates) { + llvm::DenseSet &candidates, + bool recurseInGlobal) { if (auto globalOp = symbolTable.lookup( addrOfOp.getSymbol().getRootReference().getValue())) { // TO DO: limit candidates to non-scalars. Scalars appear to have been // folded in already. if (globalOp.getConstant()) { - // Limit recursion to builtin global for now. - if (globalOp.getSymName().starts_with(builtinPrefix)) { + if (recurseInGlobal) globalOp.walk([&](fir::AddrOfOp op) { - processAddrOfOp(op, symbolTable, candidates); + processAddrOfOp(op, symbolTable, candidates, recurseInGlobal); }); - } candidates.insert(globalOp); } } @@ -52,18 +51,18 @@ static void processAddrOfOp(fir::AddrOfOp addrOfOp, static void processEmboxOp(fir::EmboxOp emboxOp, mlir::SymbolTable &symbolTable, llvm::DenseSet &candidates) { if (auto recTy = mlir::dyn_cast( - fir::unwrapRefType(emboxOp.getMemref().getType()))) - // Only look at builtin record type. - if (recTy.getName().starts_with(builtinPrefix)) - if (auto globalOp = symbolTable.lookup( - fir::NameUniquer::getTypeDescriptorName(recTy.getName()))) { - if (!candidates.contains(globalOp)) { - globalOp.walk([&](fir::AddrOfOp op) { - processAddrOfOp(op, symbolTable, candidates); - }); - candidates.insert(globalOp); - } + fir::unwrapRefType(emboxOp.getMemref().getType()))) { + if (auto globalOp = symbolTable.lookup( + fir::NameUniquer::getTypeDescriptorName(recTy.getName()))) { + if (!candidates.contains(globalOp)) { + globalOp.walk([&](fir::AddrOfOp op) { + processAddrOfOp(op, symbolTable, candidates, + /*recurseInGlobal=*/true); + }); + candidates.insert(globalOp); } + } + } } static void @@ -74,7 +73,7 @@ prepareImplicitDeviceGlobals(mlir::func::FuncOp funcOp, funcOp->getAttrOfType(cuf::getProcAttrName())}; if (cudaProcAttr && cudaProcAttr.getValue() != cuf::ProcAttribute::Host) { funcOp.walk([&](fir::AddrOfOp op) { - processAddrOfOp(op, symbolTable, candidates); + processAddrOfOp(op, symbolTable, candidates, /*recurseInGlobal=*/false); }); funcOp.walk( [&](fir::EmboxOp op) { processEmboxOp(op, symbolTable, candidates); }); @@ -97,7 +96,8 @@ public: }); mod.walk([&](cuf::KernelOp kernelOp) { kernelOp.walk([&](fir::AddrOfOp addrOfOp) { - processAddrOfOp(addrOfOp, symTable, candidates); + processAddrOfOp(addrOfOp, symTable, candidates, + /*recurseInGlobal=*/false); }); }); diff --git a/flang/test/Fir/CUDA/cuda-implicit-device-global.f90 b/flang/test/Fir/CUDA/cuda-implicit-device-global.f90 index ef32722488fe..9b22ed86e419 100644 --- a/flang/test/Fir/CUDA/cuda-implicit-device-global.f90 +++ b/flang/test/Fir/CUDA/cuda-implicit-device-global.f90 @@ -195,13 +195,13 @@ func.func private @_FortranAProgramEndStatement() // ----- func.func @_QMmtestsPtestany() attributes {cuf.proc_attr = #cuf.cuda_proc} { - %1135 = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> {bindc_name = "x", uniq_name = "_QMmtestsFtestanyEx"} - %1136 = fir.declare %1135 {uniq_name = "_QMmtestsFtestanyEx"} : (!fir.ref}>>) -> !fir.ref}>> - %1138 = fir.embox %1136 : (!fir.ref}>>) -> !fir.box}>> + %1135 = fir.alloca !fir.type<_QM__mod1T__builtin_c_devptr{cptr:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> {bindc_name = "x", uniq_name = "_QMmtestsFtestanyEx"} + %1136 = fir.declare %1135 {uniq_name = "_QMmtestsFtestanyEx"} : (!fir.ref}>>) -> !fir.ref}>> + %1138 = fir.embox %1136 : (!fir.ref}>>) -> !fir.box}>> return } -fir.type_info @_QM__fortran_builtinsT__builtin_c_devptr noinit nodestroy nofinal : !fir.type<_QM__fortran_builtinsT__builtin_c_devptr{cptr:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> -fir.global linkonce_odr @_QM__fortran_builtinsE.dt.__builtin_c_devptr constant : !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> { +fir.type_info @_QM__mod1T__builtin_c_devptr noinit nodestroy nofinal : !fir.type<_QM__mod1T__builtin_c_devptr{cptr:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> +fir.global linkonce_odr @_QM__mod1E.dt.__builtin_c_devptr constant : !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> { %c1_i8 = arith.constant 1 : i8 %c0_i8 = arith.constant 0 : i8 %c0_i32 = arith.constant 0 : i32 @@ -209,102 +209,102 @@ fir.global linkonce_odr @_QM__fortran_builtinsE.dt.__builtin_c_devptr constant : %c8_i64 = arith.constant 8 : i64 %c18 = arith.constant 18 : index %c0 = arith.constant 0 : index - %0 = fir.undefined !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %1 = fir.zero_bits !fir.ptr,name:!fir.box>>}>>> + %0 = fir.undefined !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %1 = fir.zero_bits !fir.ptr,name:!fir.box>>}>>> %2 = fir.shape %c0 : (index) -> !fir.shape<1> - %3 = fir.embox %1(%2) : (!fir.ptr,name:!fir.box>>}>>>, !fir.shape<1>) -> !fir.box,name:!fir.box>>}>>>> - %4 = fir.insert_value %0, %3, ["binding", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box,name:!fir.box>>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %5 = fir.address_of(@_QM__fortran_builtinsE.n.__builtin_c_devptr) : !fir.ref> - %6 = fir.declare %5 typeparams %c18 {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_builtinsE.n.__builtin_c_devptr"} : (!fir.ref>, index) -> !fir.ref> + %3 = fir.embox %1(%2) : (!fir.ptr,name:!fir.box>>}>>>, !fir.shape<1>) -> !fir.box,name:!fir.box>>}>>>> + %4 = fir.insert_value %0, %3, ["binding", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box,name:!fir.box>>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %5 = fir.address_of(@_QM__mod1E.n.__builtin_c_devptr) : !fir.ref> + %6 = fir.declare %5 typeparams %c18 {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__mod1E.n.__builtin_c_devptr"} : (!fir.ref>, index) -> !fir.ref> %7 = fir.embox %6 : (!fir.ref>) -> !fir.box> %8 = fir.rebox %7 : (!fir.box>) -> !fir.box>> - %9 = fir.insert_value %4, %8, ["name", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %10 = fir.insert_value %9, %c8_i64, ["sizeinbytes", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i64) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %11 = fir.zero_bits !fir.ptr,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> - %12 = fir.embox %11 : (!fir.ptr,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>> - %13 = fir.insert_value %10, %12, ["uninstantiated", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %9 = fir.insert_value %4, %8, ["name", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %10 = fir.insert_value %9, %c8_i64, ["sizeinbytes", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i64) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %11 = fir.zero_bits !fir.ptr,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> + %12 = fir.embox %11 : (!fir.ptr,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>> + %13 = fir.insert_value %10, %12, ["uninstantiated", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> %14 = fir.zero_bits !fir.ptr> %15 = fir.embox %14(%2) : (!fir.ptr>, !fir.shape<1>) -> !fir.box>> - %16 = fir.insert_value %13, %15, ["kindparameter", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %16 = fir.insert_value %13, %15, ["kindparameter", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> %17 = fir.zero_bits !fir.ptr> %18 = fir.embox %17(%2) : (!fir.ptr>, !fir.shape<1>) -> !fir.box>> - %19 = fir.insert_value %16, %18, ["lenparameterkind", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %20 = fir.address_of(@_QM__fortran_builtinsE.c.__builtin_c_devptr) : !fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>> + %19 = fir.insert_value %16, %18, ["lenparameterkind", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %20 = fir.address_of(@_QM__mod1E.c.__builtin_c_devptr) : !fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>> %21 = fir.shape_shift %c0, %c1 : (index, index) -> !fir.shapeshift<1> - %22 = fir.declare %20(%21) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_builtinsE.c.__builtin_c_devptr"} : (!fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>, !fir.shapeshift<1>) -> !fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>> - %23 = fir.embox %22(%21) : (!fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>, !fir.shapeshift<1>) -> !fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>> + %22 = fir.declare %20(%21) {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__mod1E.c.__builtin_c_devptr"} : (!fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>, !fir.shapeshift<1>) -> !fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>> + %23 = fir.embox %22(%21) : (!fir.ref>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>, !fir.shapeshift<1>) -> !fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>> %24 = fir.shift %c0 : (index) -> !fir.shift<1> - %25 = fir.rebox %23(%24) : (!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>, !fir.shift<1>) -> !fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>> - %26 = fir.insert_value %19, %25, ["component", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %27 = fir.zero_bits !fir.ptr>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>> - %28 = fir.embox %27(%2) : (!fir.ptr>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>, !fir.shape<1>) -> !fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>> - %29 = fir.insert_value %26, %28, ["procptr", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %30 = fir.zero_bits !fir.ptr,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>> - %31 = fir.embox %30(%2) : (!fir.ptr,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>, !fir.shape<1>) -> !fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>> - %32 = fir.insert_value %29, %31, ["special", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %33 = fir.insert_value %32, %c0_i32, ["specialbitset", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i32) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %34 = fir.insert_value %33, %c0_i8, ["hasparent", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %35 = fir.insert_value %34, %c1_i8, ["noinitializationneeded", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %36 = fir.insert_value %35, %c1_i8, ["nodestructionneeded", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - %37 = fir.insert_value %36, %c1_i8, ["nofinalizationneeded", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> - fir.has_value %37 : !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %25 = fir.rebox %23(%24) : (!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>, !fir.shift<1>) -> !fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>> + %26 = fir.insert_value %19, %25, ["component", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %27 = fir.zero_bits !fir.ptr>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>> + %28 = fir.embox %27(%2) : (!fir.ptr>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>, !fir.shape<1>) -> !fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>> + %29 = fir.insert_value %26, %28, ["procptr", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %30 = fir.zero_bits !fir.ptr,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>> + %31 = fir.embox %30(%2) : (!fir.ptr,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>, !fir.shape<1>) -> !fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>> + %32 = fir.insert_value %29, %31, ["special", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, !fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %33 = fir.insert_value %32, %c0_i32, ["specialbitset", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i32) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %34 = fir.insert_value %33, %c0_i8, ["hasparent", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %35 = fir.insert_value %34, %c1_i8, ["noinitializationneeded", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %36 = fir.insert_value %35, %c1_i8, ["nodestructionneeded", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + %37 = fir.insert_value %36, %c1_i8, ["nofinalizationneeded", !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>] : (!fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>, i8) -> !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> + fir.has_value %37 : !fir.type<_QM__fortran_type_infoTderivedtype{binding:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}> } -fir.global linkonce_odr @_QM__fortran_builtinsE.n.__builtin_c_devptr constant : !fir.char<1,18> { +fir.global linkonce_odr @_QM__mod1E.n.__builtin_c_devptr constant : !fir.char<1,18> { %0 = fir.string_lit "__builtin_c_devptr"(18) : !fir.char<1,18> fir.has_value %0 : !fir.char<1,18> } -fir.global linkonce_odr @_QM__fortran_builtinsE.c.__builtin_c_devptr constant : !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>> { +fir.global linkonce_odr @_QM__mod1E.c.__builtin_c_devptr constant : !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>> { %c0 = arith.constant 0 : index %c0_i64 = arith.constant 0 : i64 %c0_i8 = arith.constant 0 : i8 %c5_i8 = arith.constant 5 : i8 %c1_i8 = arith.constant 1 : i8 %c4 = arith.constant 4 : index - %0 = fir.undefined !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>> - %1 = fir.undefined !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %2 = fir.address_of(@_QM__fortran_builtinsE.n.cptr) : !fir.ref> - %3 = fir.declare %2 typeparams %c4 {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_builtinsE.n.cptr"} : (!fir.ref>, index) -> !fir.ref> + %0 = fir.undefined !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>> + %1 = fir.undefined !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %2 = fir.address_of(@_QM__mod1E.n.cptr) : !fir.ref> + %3 = fir.declare %2 typeparams %c4 {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__mod1E.n.cptr"} : (!fir.ref>, index) -> !fir.ref> %4 = fir.embox %3 : (!fir.ref>) -> !fir.box> %5 = fir.rebox %4 : (!fir.box>) -> !fir.box>> - %6 = fir.insert_value %1, %5, ["name", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %7 = fir.insert_value %6, %c1_i8, ["genre", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %8 = fir.insert_value %7, %c5_i8, ["category", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %9 = fir.insert_value %8, %c0_i8, ["kind", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %10 = fir.insert_value %9, %c0_i8, ["rank", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %11 = fir.insert_value %10, %c0_i64, ["offset", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, i64) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> + %6 = fir.insert_value %1, %5, ["name", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, !fir.box>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %7 = fir.insert_value %6, %c1_i8, ["genre", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %8 = fir.insert_value %7, %c5_i8, ["category", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %9 = fir.insert_value %8, %c0_i8, ["kind", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %10 = fir.insert_value %9, %c0_i8, ["rank", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, i8) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %11 = fir.insert_value %10, %c0_i64, ["offset", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, i64) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> %12 = fir.undefined !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}> %13 = fir.insert_value %12, %c1_i8, ["genre", !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>] : (!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>, i8) -> !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}> %14 = fir.insert_value %13, %c0_i64, ["value", !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>] : (!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>, i64) -> !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}> - %15 = fir.insert_value %11, %14, ["characterlen", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %16 = fir.address_of(@_QM__fortran_builtinsE.dt.__builtin_c_ptr) : !fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> - %17 = fir.declare %16 {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__fortran_builtinsE.dt.__builtin_c_ptr"} : (!fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> - %18 = fir.embox %17 : (!fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> - %19 = fir.rebox %18 : (!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>> - %20 = fir.insert_value %15, %19, ["derived", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> + %15 = fir.insert_value %11, %14, ["characterlen", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, !fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %16 = fir.address_of(@_QM__mod1E.dt.__builtin_c_ptr) : !fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> + %17 = fir.declare %16 {fortran_attrs = #fir.var_attrs, uniq_name = "_QM__mod1E.dt.__builtin_c_ptr"} : (!fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> + %18 = fir.embox %17 : (!fir.ref,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>> + %19 = fir.rebox %18 : (!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>) -> !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>> + %20 = fir.insert_value %15, %19, ["derived", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, !fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> %21 = fir.zero_bits !fir.ptr,value:i64}>>> %22 = fir.shape %c0 : (index) -> !fir.shape<1> %23 = fir.embox %21(%22) : (!fir.ptr,value:i64}>>>, !fir.shape<1>) -> !fir.box,value:i64}>>>> - %24 = fir.insert_value %20, %23, ["lenvalue", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, !fir.box,value:i64}>>>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> + %24 = fir.insert_value %20, %23, ["lenvalue", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, !fir.box,value:i64}>>>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> %25 = fir.zero_bits !fir.ptr,value:i64}>>> %26 = fir.shape %c0, %c0 : (index, index) -> !fir.shape<2> %27 = fir.embox %25(%26) : (!fir.ptr,value:i64}>>>, !fir.shape<2>) -> !fir.box,value:i64}>>>> - %28 = fir.insert_value %24, %27, ["bounds", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, !fir.box,value:i64}>>>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> + %28 = fir.insert_value %24, %27, ["bounds", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, !fir.box,value:i64}>>>>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> %29 = fir.zero_bits !fir.ref %30 = fir.convert %29 : (!fir.ref) -> i64 - %31 = fir.undefined !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}> - %32 = fir.insert_value %31, %30, ["__address", !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>] : (!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>, i64) -> !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}> - %33 = fir.insert_value %28, %32, ["initialization", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>, !fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}> - %34 = fir.insert_value %0, %33, [0 : index] : (!fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>>, !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>) -> !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>> - fir.has_value %34 : !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__fortran_builtinsT__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__fortran_builtinsT__builtin_c_ptr{__address:i64}>}>> + %31 = fir.undefined !fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}> + %32 = fir.insert_value %31, %30, ["__address", !fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>] : (!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>, i64) -> !fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}> + %33 = fir.insert_value %28, %32, ["initialization", !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>] : (!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>, !fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>) -> !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}> + %34 = fir.insert_value %0, %33, [0 : index] : (!fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>>, !fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>) -> !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>> + fir.has_value %34 : !fir.array<1x!fir.type<_QM__fortran_type_infoTcomponent{name:!fir.box>>,genre:i8,category:i8,kind:i8,rank:i8,__padding0:!fir.array<4xi8>,offset:i64,characterlen:!fir.type<_QM__fortran_type_infoTvalue{genre:i8,__padding0:!fir.array<7xi8>,value:i64}>,derived:!fir.box,name:!fir.box>>}>>>>,name:!fir.box>>,sizeinbytes:i64,uninstantiated:!fir.box>>,kindparameter:!fir.box>>,lenparameterkind:!fir.box>>,component:!fir.box>>>,procptr:!fir.box>>,offset:i64,initialization:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,special:!fir.box,proc:!fir.type<_QM__mod1T__builtin_c_funptr{__address:i64}>}>>>>,specialbitset:i32,hasparent:i8,noinitializationneeded:i8,nodestructionneeded:i8,nofinalizationneeded:i8,__padding0:!fir.array<4xi8>}>>>,lenvalue:!fir.box,value:i64}>>>>,bounds:!fir.box,value:i64}>>>>,initialization:!fir.type<_QM__mod1T__builtin_c_ptr{__address:i64}>}>> } -fir.global linkonce_odr @_QM__fortran_builtinsE.n.cptr constant : !fir.char<1,4> { +fir.global linkonce_odr @_QM__mod1E.n.cptr constant : !fir.char<1,4> { %0 = fir.string_lit "cptr"(4) : !fir.char<1,4> fir.has_value %0 : !fir.char<1,4> } // CHECK-LABEL: func.func @_QMmtestsPtestany() // CHECK: gpu.module @cuda_device_mod -// CHECK-DAG: fir.global linkonce_odr @_QM__fortran_builtinsE.n.cptr -// CHECK-DAG: fir.global linkonce_odr @_QM__fortran_builtinsE.c.__builtin_c_devptr -// CHECK-DAG: fir.global linkonce_odr @_QM__fortran_builtinsE.dt.__builtin_c_devptr -// CHECK-DAG: fir.global linkonce_odr @_QM__fortran_builtinsE.n.__builtin_c_devptr +// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.n.cptr +// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.c.__builtin_c_devptr +// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.dt.__builtin_c_devptr +// CHECK-DAG: fir.global linkonce_odr @_QM__mod1E.n.__builtin_c_devptr -- cgit v1.2.3 From 37cd7926b767b3877bfa8079f2f8bcb4cd104b1f Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 13 Dec 2024 07:53:05 +0900 Subject: AMDGPU: Fix entry for mac in VGPR->AGPR MFMA table (#119693) --- llvm/lib/Target/AMDGPU/VOP3PInstructions.td | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/AMDGPU/VOP3PInstructions.td b/llvm/lib/Target/AMDGPU/VOP3PInstructions.td index 7638879afcb5..689f3b38a172 100644 --- a/llvm/lib/Target/AMDGPU/VOP3PInstructions.td +++ b/llvm/lib/Target/AMDGPU/VOP3PInstructions.td @@ -890,7 +890,7 @@ multiclass MAIInst("VOPProfileMAI_" # P # "_VCD"), !if(!eq(node, null_frag), null_frag, VgprMAIFrag), Scaled>, - MFMATable<1, "VGPR", NAME # "_vgprcd_e64">; + MFMATable<1, "VGPR", NAME # "_vgprcd_e64", NAME # "_mac_e64">; } } } // End isConvergent = 1, mayRaiseFPException = 0, ReadsModeReg = 1 -- cgit v1.2.3 From 37978c466b9c02463885a5de62d16f8ce0ca577f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Clement=20=28=E3=83=90=E3=83=AC=E3=83=B3?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=B3=20=E3=82=AF=E3=83=AC=E3=83=A1?= =?UTF-8?q?=E3=83=B3=29?= Date: Thu, 12 Dec 2024 15:04:16 -0800 Subject: [flang][cuda] Remove unused variable --- flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp b/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp index 9650fb708cdb..07cc1f3b4b51 100644 --- a/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp +++ b/flang/lib/Optimizer/Transforms/CUFDeviceGlobal.cpp @@ -28,8 +28,6 @@ namespace fir { namespace { -static constexpr llvm::StringRef builtinPrefix = "_QM__fortran_builtins"; - static void processAddrOfOp(fir::AddrOfOp addrOfOp, mlir::SymbolTable &symbolTable, llvm::DenseSet &candidates, -- cgit v1.2.3 From e605969efe95efd9941cf958d921006d0833889f Mon Sep 17 00:00:00 2001 From: Soren Lassen Date: Thu, 12 Dec 2024 15:04:33 -0800 Subject: [MLIR] check resource attr of module in TEST(Bytecode, MultiModuleWithResource) (#119618) `checkResourceAttribute` accidentally ignored its argument and only checked `roundTripModule` and not `module` --- mlir/unittests/Bytecode/BytecodeTest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlir/unittests/Bytecode/BytecodeTest.cpp b/mlir/unittests/Bytecode/BytecodeTest.cpp index baf5d5c650e3..cb915a092a0b 100644 --- a/mlir/unittests/Bytecode/BytecodeTest.cpp +++ b/mlir/unittests/Bytecode/BytecodeTest.cpp @@ -69,8 +69,8 @@ TEST(Bytecode, MultiModuleWithResource) { GTEST_SKIP(); // Try to see if we have a valid resource in the parsed module. - auto checkResourceAttribute = [&](Operation *op) { - Attribute attr = roundTripModule->getDiscardableAttr("bytecode.test"); + auto checkResourceAttribute = [](Operation *parsedModule) { + Attribute attr = parsedModule->getDiscardableAttr("bytecode.test"); ASSERT_TRUE(attr); auto denseResourceAttr = dyn_cast(attr); ASSERT_TRUE(denseResourceAttr); -- cgit v1.2.3 From 7442be68f7e4bbb9ded915283ea49a005f7ffe8f Mon Sep 17 00:00:00 2001 From: Michael Maitland Date: Thu, 12 Dec 2024 18:06:21 -0500 Subject: [RISCV][VLOPT] Add vector mask producing integer instructions to isSupportedInstr and getOperandInfo (#119733) --- llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp | 73 +++- llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll | 499 +++++++++++++++++++++++++ llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir | 81 +++- 3 files changed, 651 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp index 1d5684d6038e..d151fe9dd104 100644 --- a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp +++ b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp @@ -341,11 +341,17 @@ static OperandInfo getOperandInfo(const MachineInstr &MI, case RISCV::VNMSUB_VV: case RISCV::VNMSUB_VX: // Vector Integer Merge Instructions + // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions // EEW=SEW and EMUL=LMUL, except the mask operand has EEW=1 and EMUL= // (EEW/SEW)*LMUL. Mask operand is handled before this switch. case RISCV::VMERGE_VIM: case RISCV::VMERGE_VVM: case RISCV::VMERGE_VXM: + case RISCV::VADC_VIM: + case RISCV::VADC_VVM: + case RISCV::VADC_VXM: + case RISCV::VSBC_VVM: + case RISCV::VSBC_VXM: // Vector Integer Move Instructions // Vector Fixed-Point Arithmetic Instructions // Vector Single-Width Saturating Add and Subtract @@ -521,6 +527,47 @@ static OperandInfo getOperandInfo(const MachineInstr &MI, return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(0, MI), 0); } + // Vector Integer Compare Instructions + // Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL. + case RISCV::VMSEQ_VI: + case RISCV::VMSEQ_VV: + case RISCV::VMSEQ_VX: + case RISCV::VMSNE_VI: + case RISCV::VMSNE_VV: + case RISCV::VMSNE_VX: + case RISCV::VMSLTU_VV: + case RISCV::VMSLTU_VX: + case RISCV::VMSLT_VV: + case RISCV::VMSLT_VX: + case RISCV::VMSLEU_VV: + case RISCV::VMSLEU_VI: + case RISCV::VMSLEU_VX: + case RISCV::VMSLE_VV: + case RISCV::VMSLE_VI: + case RISCV::VMSLE_VX: + case RISCV::VMSGTU_VI: + case RISCV::VMSGTU_VX: + case RISCV::VMSGT_VI: + case RISCV::VMSGT_VX: + // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions + // Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL. Mask + // source operand handled above this switch. + case RISCV::VMADC_VIM: + case RISCV::VMADC_VVM: + case RISCV::VMADC_VXM: + case RISCV::VMSBC_VVM: + case RISCV::VMSBC_VXM: + // Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL. + case RISCV::VMADC_VV: + case RISCV::VMADC_VI: + case RISCV::VMADC_VX: + case RISCV::VMSBC_VV: + case RISCV::VMSBC_VX: { + if (IsMODef) + return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(0, MI), 0); + return OperandInfo(MIVLMul, MILog2SEW); + } + default: return {}; } @@ -591,6 +638,11 @@ static bool isSupportedInstr(const MachineInstr &MI) { case RISCV::VSEXT_VF8: // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions // FIXME: Add support + case RISCV::VMADC_VV: + case RISCV::VMADC_VI: + case RISCV::VMADC_VX: + case RISCV::VMSBC_VV: + case RISCV::VMSBC_VX: // Vector Narrowing Integer Right Shift Instructions case RISCV::VNSRL_WX: case RISCV::VNSRL_WI: @@ -599,7 +651,26 @@ static bool isSupportedInstr(const MachineInstr &MI) { case RISCV::VNSRA_WV: case RISCV::VNSRA_WX: // Vector Integer Compare Instructions - // FIXME: Add support + case RISCV::VMSEQ_VI: + case RISCV::VMSEQ_VV: + case RISCV::VMSEQ_VX: + case RISCV::VMSNE_VI: + case RISCV::VMSNE_VV: + case RISCV::VMSNE_VX: + case RISCV::VMSLTU_VV: + case RISCV::VMSLTU_VX: + case RISCV::VMSLT_VV: + case RISCV::VMSLT_VX: + case RISCV::VMSLEU_VV: + case RISCV::VMSLEU_VI: + case RISCV::VMSLEU_VX: + case RISCV::VMSLE_VV: + case RISCV::VMSLE_VI: + case RISCV::VMSLE_VX: + case RISCV::VMSGTU_VI: + case RISCV::VMSGTU_VX: + case RISCV::VMSGT_VI: + case RISCV::VMSGT_VX: // Vector Integer Min/Max Instructions case RISCV::VMINU_VV: case RISCV::VMINU_VX: diff --git a/llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll b/llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll index a21e3df85193..35274c25da85 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll @@ -962,6 +962,106 @@ define @vzext_vf8( %a, %b ret %2 } +define @vmadc_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmadc_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmadc.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmadc_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmadc.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmadc.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmadc_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmadc_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmadc.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmadc_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmadc.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmadc.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmadc_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmadc_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmadc.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmadc_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmadc.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmadc.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsbc_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsbc_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsbc.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsbc_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsbc.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsbc.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsbc_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsbc_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsbc.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsbc_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsbc.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsbc.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + define @vnsrl_wi( %a, %b, iXLen %vl) { ; NOVLOPT-LABEL: vnsrl_wi: ; NOVLOPT: # %bb.0: @@ -1082,6 +1182,405 @@ define @vnsra_wv( %a, %b ret %2 } +define @vmseq_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmseq_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmseq.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmseq_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmseq.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmseq.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmseq_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmseq_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmseq.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmseq_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmseq.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmseq.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmseq_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmseq_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmseq.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmseq_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmseq.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmseq.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsne_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmsne_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsne.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsne_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsne.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsne.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsne_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsne_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsne.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsne_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsne.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsne.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsne_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsne_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsne.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsne_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsne.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsne.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsltu_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsltu_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsltu.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsltu_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsltu.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsltu.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsltu_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsltu_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsltu.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsltu_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsltu.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsltu.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmslt_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmslt_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmslt.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmslt_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmslt.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmslt.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmslt_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmslt_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmslt.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmslt_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmslt.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmslt.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsleu_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmsleu_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsleu.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsleu_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsleu.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsleu.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsleu_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsleu_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsleu.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsleu_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsleu.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsleu.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsleu_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsleu_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsleu.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsleu_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsleu.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsleu.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsle_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmsle_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsle.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsle_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsle.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsle.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsle_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsle_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsle.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsle_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsle.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsle.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsle_vv( %a, %b, %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsle_vv: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsle.vv v12, v8, v10 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v12, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsle_vv: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsle.vv v12, v8, v10 +; VLOPT-NEXT: vmand.mm v0, v12, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsle.nxv4i32.nxv4i32( %a, %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsgtu_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmsgtu_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsgtu.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsgtu_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsgtu.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsgtu.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsgtu_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsgtu_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsgtu.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsgtu_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsgtu.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsgtu.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsgt_vi( %a, %b, iXLen %vl) { +; NOVLOPT-LABEL: vmsgt_vi: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsgt.vi v10, v8, 5 +; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsgt_vi: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma +; VLOPT-NEXT: vmsgt.vi v10, v8, 5 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsgt.nxv4i32.i32( %a, i32 5, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} + +define @vmsgt_vx( %a, %b, i32 %c, iXLen %vl) { +; NOVLOPT-LABEL: vmsgt_vx: +; NOVLOPT: # %bb.0: +; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma +; NOVLOPT-NEXT: vmsgt.vx v10, v8, a0 +; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma +; NOVLOPT-NEXT: vmand.mm v0, v10, v0 +; NOVLOPT-NEXT: ret +; +; VLOPT-LABEL: vmsgt_vx: +; VLOPT: # %bb.0: +; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma +; VLOPT-NEXT: vmsgt.vx v10, v8, a0 +; VLOPT-NEXT: vmand.mm v0, v10, v0 +; VLOPT-NEXT: ret + %1 = call @llvm.riscv.vmsgt.nxv4i32.i32( %a, i32 %c, iXLen -1) + %2 = call @llvm.riscv.vmand.nxv4i1( %1, %b, iXLen %vl) + ret %2 +} define @vminu_vv( %a, %b, iXLen %vl) { ; NOVLOPT-LABEL: vminu_vv: diff --git a/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir b/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir index f1e7bb446482..912fc2ccbd12 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir +++ b/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir @@ -602,4 +602,83 @@ body: | %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 %y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 ... - +--- +name: vmop_vv +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv + ; CHECK: %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, 1, 3 /* e8 */ + ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0 /* e8 */ + %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + %y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0 +... +--- +name: vmop_vv_maskuser +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_maskuser + ; CHECK: %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, 1, 3 /* e8 */ + ; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ + %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 +... +--- +name: vmop_vv_maskuser_incompatible_eew +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_maskuser_incompatible_eew + ; CHECK: %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + ; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0 /* tu, mu */ + %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0 +... +--- +name: vmop_vv_incompatible_emul +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_incompatible_emul + ; CHECK: %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0 /* e8 */ + %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + %y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0 +... +--- +name: vmop_vv_maskuser_incompaible_emul +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_maskuser_incompaible_emul + ; CHECK: %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + ; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ + %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + %y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 +... +--- +name: vmop_vv_maskuser_larger_emul +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_maskuser_larger_emul + ; CHECK: %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, 1, 3 /* e8 */ + ; CHECK-NEXT: %y:vrm2nov0 = PseudoVADD_VV_M2_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0 /* tu, mu */ + %x:vmv0 = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ + %y:vrm2nov0 = PseudoVADD_VV_M2_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0 +... +--- +name: vmop_vv_consumer_incompatible_eew +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_consumer_incompatible_eew + ; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ + ; CHECK-NEXT: %y:vr = PseudoVMSEQ_VV_M1 $noreg, %x, 1, 4 /* e16 */ + %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 + %y:vr = PseudoVMSEQ_VV_M1 $noreg, %x, 1, 4 /* e16 */ +... +--- +name: vmop_vv_consumer_incompatible_emul +body: | + bb.0: + ; CHECK-LABEL: name: vmop_vv_consumer_incompatible_emul + ; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ + ; CHECK-NEXT: %y:vr = PseudoVMSEQ_VV_MF2 $noreg, %x, 1, 3 /* e8 */ + %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 + %y:vr = PseudoVMSEQ_VV_MF2 $noreg, %x, 1, 3 /* e8 */ +... -- cgit v1.2.3 From 602bbf2fd2ee1dadf0982e05192ee8791b35c657 Mon Sep 17 00:00:00 2001 From: Congcong Cai Date: Fri, 13 Dec 2024 07:18:42 +0800 Subject: [clang-tidy][NFC][doc] clean out-dated clang-static-analyzer checks (#119580) --- .../checks/clang-analyzer/cplusplus.PureVirtualCall.rst | 9 --------- .../checks/clang-analyzer/cplusplus.SelfAssignment.rst | 13 +++++++++++++ .../checks/clang-analyzer/optin.osx.OSObjectCStyleCast.rst | 9 --------- .../docs/clang-tidy/checks/clang-analyzer/osx.MIG.rst | 9 --------- .../checks/clang-analyzer/osx.OSObjectRetainCount.rst | 9 --------- .../checks/clang-analyzer/security.PutenvStackArray.rst | 13 +++++++++---- .../checks/clang-analyzer/security.SetgidSetuidOrder.rst | 14 ++++++++++---- clang-tools-extra/docs/clang-tidy/checks/list.rst | 13 +++---------- 8 files changed, 35 insertions(+), 54 deletions(-) delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.PureVirtualCall.rst create mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.SelfAssignment.rst delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/optin.osx.OSObjectCStyleCast.rst delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.MIG.rst delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.OSObjectRetainCount.rst diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.PureVirtualCall.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.PureVirtualCall.rst deleted file mode 100644 index 9fab628b80d4..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.PureVirtualCall.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-cplusplus.PureVirtualCall - -clang-analyzer-cplusplus.PureVirtualCall -======================================== - -Check pure virtual function calls during construction/destruction. - -The clang-analyzer-cplusplus.PureVirtualCall check is an alias of -Clang Static Analyzer cplusplus.PureVirtualCall. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.SelfAssignment.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.SelfAssignment.rst new file mode 100644 index 000000000000..62e300660828 --- /dev/null +++ b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/cplusplus.SelfAssignment.rst @@ -0,0 +1,13 @@ +.. title:: clang-tidy - clang-analyzer-cplusplus.SelfAssignment +.. meta:: + :http-equiv=refresh: 5;URL=https://clang.llvm.org/docs/analyzer/checkers.html#cplusplus-selfassignment + +clang-analyzer-cplusplus.SelfAssignment +======================================= + +Checks C++ copy and move assignment operators for self assignment. + +The `clang-analyzer-cplusplus.SelfAssignment` check is an alias, please see +`Clang Static Analyzer Available Checkers +`_ +for more information. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/optin.osx.OSObjectCStyleCast.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/optin.osx.OSObjectCStyleCast.rst deleted file mode 100644 index c2fef59f5689..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/optin.osx.OSObjectCStyleCast.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-optin.osx.OSObjectCStyleCast - -clang-analyzer-optin.osx.OSObjectCStyleCast -=========================================== - -Checker for C-style casts of OSObjects. - -The clang-analyzer-optin.osx.OSObjectCStyleCast check is an alias of -Clang Static Analyzer optin.osx.OSObjectCStyleCast. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.MIG.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.MIG.rst deleted file mode 100644 index a7b8a1cfb14c..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.MIG.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-osx.MIG - -clang-analyzer-osx.MIG -====================== - -Find violations of the Mach Interface Generator calling convention. - -The clang-analyzer-osx.MIG check is an alias of -Clang Static Analyzer osx.MIG. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.OSObjectRetainCount.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.OSObjectRetainCount.rst deleted file mode 100644 index c32982d407c2..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/osx.OSObjectRetainCount.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-osx.OSObjectRetainCount - -clang-analyzer-osx.OSObjectRetainCount -====================================== - -Check for leaks and improper reference count management for OSObject. - -The clang-analyzer-osx.OSObjectRetainCount check is an alias of -Clang Static Analyzer osx.OSObjectRetainCount. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst index 0a5feff8d3ca..55506ed16c83 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst @@ -3,8 +3,13 @@ clang-analyzer-security.PutenvStackArray ======================================== -Finds calls to the function 'putenv' which pass a pointer to an automatic -(stack-allocated) array as the argument. +Finds calls to the putenv function which pass a pointer to a stack-allocated +(automatic) array as the argument. Function putenv does not copy the passed +string, only a pointer to the data is stored and this data can be read even by +other threads. Content of a stack-allocated array is likely to be overwritten +after exiting from the function. -The clang-analyzer-security.PutenvStackArray check is an alias of -Clang Static Analyzer security.PutenvStackArray. +The `clang-analyzer-security.PutenvStackArray` check is an alias, please see +`Clang Static Analyzer Available Checkers +`_ +for more information. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst index 82f22b11f77f..af9ca517e02c 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst @@ -3,8 +3,14 @@ clang-analyzer-security.SetgidSetuidOrder ========================================= -Warn on possible reversed order of 'setgid(getgid()))' and 'setuid(getuid())' -(CERT: POS36-C). +The checker checks for sequences of ``setuid(getuid())`` and ``setgid(getgid())`` +calls (in this order). If such a sequence is found and there is no other +privilege-changing function call (``seteuid``, ``setreuid``, ``setresuid`` and +the GID versions of these) in between, a warning is generated. The checker finds +only exactly ``setuid(getuid())`` calls (and the GID versions), not for example +if the result of ``getuid()`` is stored in a variable. -The clang-analyzer-security.SetgidSetuidOrder check is an alias of -Clang Static Analyzer security.SetgidSetuidOrder. +The `clang-analyzer-security.SetgidSetuidOrder` check is an alias, please see +`Clang Static Analyzer Available Checkers +`_ +for more information. diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst index 41f8f958e9e1..c85466618ec0 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/list.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst @@ -459,7 +459,7 @@ Check aliases :doc:`clang-analyzer-cplusplus.NewDelete `, `Clang Static Analyzer cplusplus.NewDelete `_, :doc:`clang-analyzer-cplusplus.NewDeleteLeaks `, `Clang Static Analyzer cplusplus.NewDeleteLeaks `_, :doc:`clang-analyzer-cplusplus.PlacementNew `, `Clang Static Analyzer cplusplus.PlacementNew `_, - :doc:`clang-analyzer-cplusplus.PureVirtualCall `, Clang Static Analyzer cplusplus.PureVirtualCall, + :doc:`clang-analyzer-cplusplus.SelfAssignment `, `Clang Static Analyzer cplusplus.SelfAssignment `_, :doc:`clang-analyzer-cplusplus.StringChecker `, `Clang Static Analyzer cplusplus.StringChecker `_, :doc:`clang-analyzer-deadcode.DeadStores `, `Clang Static Analyzer deadcode.DeadStores `_, :doc:`clang-analyzer-fuchsia.HandleChecker `, `Clang Static Analyzer fuchsia.HandleChecker `_, @@ -472,7 +472,6 @@ Check aliases :doc:`clang-analyzer-optin.cplusplus.UninitializedObject `, `Clang Static Analyzer optin.cplusplus.UninitializedObject `_, :doc:`clang-analyzer-optin.cplusplus.VirtualCall `, `Clang Static Analyzer optin.cplusplus.VirtualCall `_, :doc:`clang-analyzer-optin.mpi.MPI-Checker `, `Clang Static Analyzer optin.mpi.MPI-Checker `_, - :doc:`clang-analyzer-optin.osx.OSObjectCStyleCast `, Clang Static Analyzer optin.osx.OSObjectCStyleCast, :doc:`clang-analyzer-optin.osx.cocoa.localizability.EmptyLocalizationContextChecker `, `Clang Static Analyzer optin.osx.cocoa.localizability.EmptyLocalizationContextChecker `_, :doc:`clang-analyzer-optin.osx.cocoa.localizability.NonLocalizedStringChecker `, `Clang Static Analyzer optin.osx.cocoa.localizability.NonLocalizedStringChecker `_, :doc:`clang-analyzer-optin.performance.GCDAntipattern `, `Clang Static Analyzer optin.performance.GCDAntipattern `_, @@ -480,9 +479,7 @@ Check aliases :doc:`clang-analyzer-optin.portability.UnixAPI `, `Clang Static Analyzer optin.portability.UnixAPI `_, :doc:`clang-analyzer-optin.taint.TaintedAlloc `, `Clang Static Analyzer optin.taint.TaintedAlloc `_, :doc:`clang-analyzer-osx.API `, `Clang Static Analyzer osx.API `_, - :doc:`clang-analyzer-osx.MIG `, Clang Static Analyzer osx.MIG, :doc:`clang-analyzer-osx.NumberObjectConversion `, `Clang Static Analyzer osx.NumberObjectConversion `_, - :doc:`clang-analyzer-osx.OSObjectRetainCount `, Clang Static Analyzer osx.OSObjectRetainCount, :doc:`clang-analyzer-osx.ObjCProperty `, `Clang Static Analyzer osx.ObjCProperty `_, :doc:`clang-analyzer-osx.SecKeychainAPI `, `Clang Static Analyzer osx.SecKeychainAPI `_, :doc:`clang-analyzer-osx.cocoa.AtSync `, `Clang Static Analyzer osx.cocoa.AtSync `_, @@ -509,15 +506,14 @@ Check aliases :doc:`clang-analyzer-osx.coreFoundation.containers.OutOfBounds `, `Clang Static Analyzer osx.coreFoundation.containers.OutOfBounds `_, :doc:`clang-analyzer-osx.coreFoundation.containers.PointerSizedValues `, `Clang Static Analyzer osx.coreFoundation.containers.PointerSizedValues `_, :doc:`clang-analyzer-security.FloatLoopCounter `, `Clang Static Analyzer security.FloatLoopCounter `_, - :doc:`clang-analyzer-security.PutenvStackArray `, Clang Static Analyzer security.PutenvStackArray, - :doc:`clang-analyzer-security.SetgidSetuidOrder `, Clang Static Analyzer security.SetgidSetuidOrder, + :doc:`clang-analyzer-security.PutenvStackArray `, `Clang Static Analyzer security.PutenvStackArray `_, + :doc:`clang-analyzer-security.SetgidSetuidOrder `, `Clang Static Analyzer security.SetgidSetuidOrder `_, :doc:`clang-analyzer-security.cert.env.InvalidPtr `, `Clang Static Analyzer security.cert.env.InvalidPtr `_, :doc:`clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling `, `Clang Static Analyzer security.insecureAPI.DeprecatedOrUnsafeBufferHandling `_, :doc:`clang-analyzer-security.insecureAPI.UncheckedReturn `, `Clang Static Analyzer security.insecureAPI.UncheckedReturn `_, :doc:`clang-analyzer-security.insecureAPI.bcmp `, `Clang Static Analyzer security.insecureAPI.bcmp `_, :doc:`clang-analyzer-security.insecureAPI.bcopy `, `Clang Static Analyzer security.insecureAPI.bcopy `_, :doc:`clang-analyzer-security.insecureAPI.bzero `, `Clang Static Analyzer security.insecureAPI.bzero `_, - :doc:`clang-analyzer-security.insecureAPI.decodeValueOfObjCType `, Clang Static Analyzer security.insecureAPI.decodeValueOfObjCType, :doc:`clang-analyzer-security.insecureAPI.getpw `, `Clang Static Analyzer security.insecureAPI.getpw `_, :doc:`clang-analyzer-security.insecureAPI.gets `, `Clang Static Analyzer security.insecureAPI.gets `_, :doc:`clang-analyzer-security.insecureAPI.mkstemp `, `Clang Static Analyzer security.insecureAPI.mkstemp `_, @@ -536,9 +532,6 @@ Check aliases :doc:`clang-analyzer-unix.Vfork `, `Clang Static Analyzer unix.Vfork `_, :doc:`clang-analyzer-unix.cstring.BadSizeArg `, `Clang Static Analyzer unix.cstring.BadSizeArg `_, :doc:`clang-analyzer-unix.cstring.NullArg `, `Clang Static Analyzer unix.cstring.NullArg `_, - :doc:`clang-analyzer-valist.CopyToSelf `, Clang Static Analyzer valist.CopyToSelf, - :doc:`clang-analyzer-valist.Uninitialized `, Clang Static Analyzer valist.Uninitialized, - :doc:`clang-analyzer-valist.Unterminated `, Clang Static Analyzer valist.Unterminated, :doc:`clang-analyzer-webkit.NoUncountedMemberChecker `, `Clang Static Analyzer webkit.NoUncountedMemberChecker `_, :doc:`clang-analyzer-webkit.RefCntblBaseVirtualDtor `, `Clang Static Analyzer webkit.RefCntblBaseVirtualDtor `_, :doc:`clang-analyzer-webkit.UncountedLambdaCapturesChecker `, `Clang Static Analyzer webkit.UncountedLambdaCapturesChecker `_, -- cgit v1.2.3 From ea6e13586ce22291e9e7a4e382f6b2409b406da9 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 12 Dec 2024 15:50:33 -0800 Subject: [clang][perf-training] Fix profiling with -DCLANG_BOLT=perf (#119117) This fixes the llvm-support build that generates the profile data, and wraps the whole `cmake --build` command with perf instead of wrapping each individual clang invocation. This limits the number of profile files generated and reduces the time spent running perf2bolt. --- clang/utils/perf-training/bolt.lit.cfg | 9 ++++++++- clang/utils/perf-training/lit.cfg | 5 +++++ clang/utils/perf-training/llvm-support/build.test | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/clang/utils/perf-training/bolt.lit.cfg b/clang/utils/perf-training/bolt.lit.cfg index 1d0cf9a8a17a..dbb2dd3fd858 100644 --- a/clang/utils/perf-training/bolt.lit.cfg +++ b/clang/utils/perf-training/bolt.lit.cfg @@ -4,6 +4,7 @@ from lit import Test import lit.formats import lit.util import os +import re import subprocess clang_bolt_mode = config.clang_bolt_mode.lower() @@ -20,9 +21,13 @@ elif clang_bolt_mode == "perf": else: assert 0, "Unsupported CLANG_BOLT_MODE variable" -config.clang = perf_wrapper + os.path.realpath( +clang_nowrapper = os.path.realpath( lit.util.which(clang_binary, config.clang_tools_dir) ).replace("\\", "/") +config.clang = perf_wrapper + clang_nowrapper +config.cmake_compiler_args = "-DCMAKE_C_COMPILER='{0}' -DCMAKE_CXX_COMPILER='{0};--driver-mode=g++'".format( + re.sub(r"\s+", ";", clang_nowrapper) +) config.name = "Clang Perf Training" config.suffixes = [ @@ -49,6 +54,8 @@ config.substitutions.append(("%clang_cpp", f" {config.clang} --driver-mode=g++ " config.substitutions.append(("%clang_skip_driver", config.clang)) config.substitutions.append(("%clang", config.clang)) config.substitutions.append(("%test_root", config.test_exec_root)) +config.substitutions.append(("%cmake_compiler_args", config.cmake_compiler_args)) config.substitutions.append(('%cmake_generator', config.cmake_generator)) config.substitutions.append(('%cmake', config.cmake_exe)) config.substitutions.append(('%llvm_src_dir', config.llvm_src_dir)) +config.substitutions.append(('%perf_wrapper', perf_wrapper)) diff --git a/clang/utils/perf-training/lit.cfg b/clang/utils/perf-training/lit.cfg index 654961e215da..adefc7893ac4 100644 --- a/clang/utils/perf-training/lit.cfg +++ b/clang/utils/perf-training/lit.cfg @@ -31,14 +31,19 @@ cc1_wrapper = '%s %s/perf-helper.py cc1' % (config.python_exe, config.perf_helpe use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL") config.test_format = lit.formats.ShTest(use_lit_shell == "0") +config.cmake_compiler_args = '-DCMAKE_C_COMPILER="{0}" -DCMAKE_CXX_COMPILER="{0};--driver-mode=g++"'.format( + config.clang.replace(' ', ';') +) config.substitutions.append( ('%clang_cpp_skip_driver', ' %s %s %s ' % (cc1_wrapper, config.clang, sysroot_flags))) config.substitutions.append( ('%clang_cpp', ' %s --driver-mode=g++ %s ' % (config.clang, sysroot_flags))) config.substitutions.append( ('%clang_skip_driver', ' %s %s %s ' % (cc1_wrapper, config.clang, sysroot_flags))) config.substitutions.append( ('%clang', '%s %s ' % (config.clang, sysroot_flags) ) ) config.substitutions.append( ('%test_root', config.test_exec_root ) ) +config.substitutions.append( ('%cmake_compiler_args', config.cmake_compiler_args)) config.substitutions.append( ('%cmake_generator', config.cmake_generator ) ) config.substitutions.append( ('%cmake', config.cmake_exe ) ) config.substitutions.append( ('%llvm_src_dir', config.llvm_src_dir ) ) +config.substitutions.append( ('%perf_wrapper', '' ) ) config.environment['LLVM_PROFILE_FILE'] = 'perf-training-%4m.profraw' diff --git a/clang/utils/perf-training/llvm-support/build.test b/clang/utils/perf-training/llvm-support/build.test index f29a594c8468..32ce9a870b91 100644 --- a/clang/utils/perf-training/llvm-support/build.test +++ b/clang/utils/perf-training/llvm-support/build.test @@ -1,2 +1,2 @@ -RUN: %cmake -G %cmake_generator -B %t -S %llvm_src_dir -DCMAKE_C_COMPILER=%clang -DCMAKE_CXX_COMPILER=%clang -DCMAKE_CXX_FLAGS="--driver-mode=g++" -DCMAKE_BUILD_TYPE=Release -RUN: %cmake --build %t -v --target LLVMSupport +RUN: %cmake -G %cmake_generator -B %t -S %llvm_src_dir %cmake_compiler_args -DCMAKE_BUILD_TYPE=Release +RUN: %perf_wrapper %cmake --build %t -v --target LLVMSupport -- cgit v1.2.3 From d01c11df04ae45a3d5b08e69bb683c760bbddd54 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Thu, 12 Dec 2024 16:03:20 -0800 Subject: [clang] Migrate away from PointerUnion::{is,get} (NFC) (#119724) Note that PointerUnion::{is,get} have been soft deprecated in PointerUnion.h: // FIXME: Replace the uses of is(), get() and dyn_cast() with // isa, cast and the llvm::dyn_cast I'm not touching PointerUnion::dyn_cast for now because it's a bit complicated; we could blindly migrate it to dyn_cast_if_present, but we should probably use dyn_cast when the operand is known to be non-null. --- clang/include/clang/Basic/FileEntry.h | 4 ++-- clang/include/clang/Basic/IdentifierTable.h | 4 ++-- clang/include/clang/Sema/ParsedAttr.h | 10 ++++------ clang/include/clang/Sema/SemaConcept.h | 16 ++++++++-------- clang/include/clang/Sema/SemaInternal.h | 2 +- clang/include/clang/Sema/Template.h | 6 +++--- clang/lib/APINotes/APINotesManager.cpp | 4 ++-- clang/lib/Analysis/ThreadSafetyCommon.cpp | 2 +- clang/lib/Basic/FileManager.cpp | 8 ++++---- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 4 ++-- clang/lib/Index/IndexDecl.cpp | 2 +- 11 files changed, 30 insertions(+), 32 deletions(-) diff --git a/clang/include/clang/Basic/FileEntry.h b/clang/include/clang/Basic/FileEntry.h index ba6dfa69f214..da5ba9097429 100644 --- a/clang/include/clang/Basic/FileEntry.h +++ b/clang/include/clang/Basic/FileEntry.h @@ -68,7 +68,7 @@ public: StringRef getNameAsRequested() const { return ME->first(); } const FileEntry &getFileEntry() const { - return *getBaseMapEntry().second->V.get(); + return *cast(getBaseMapEntry().second->V); } // This function is used if the buffer size needs to be increased @@ -361,7 +361,7 @@ bool FileEntryRef::isNamedPipe() const { return getFileEntry().isNamedPipe(); } void FileEntryRef::closeFile() const { getFileEntry().closeFile(); } void FileEntryRef::updateFileEntryBufferSize(unsigned BufferSize) { - getBaseMapEntry().second->V.get()->setSize(BufferSize); + cast(getBaseMapEntry().second->V)->setSize(BufferSize); } } // end namespace clang diff --git a/clang/include/clang/Basic/IdentifierTable.h b/clang/include/clang/Basic/IdentifierTable.h index ae9ebd9f5915..33d1cdb46f10 100644 --- a/clang/include/clang/Basic/IdentifierTable.h +++ b/clang/include/clang/Basic/IdentifierTable.h @@ -1012,7 +1012,7 @@ class Selector { } MultiKeywordSelector *getMultiKeywordSelector() const { - return InfoPtr.getPointer().get(); + return cast(InfoPtr.getPointer()); } unsigned getIdentifierInfoFlag() const { @@ -1020,7 +1020,7 @@ class Selector { // IMPORTANT NOTE: We have to reconstitute this data rather than use the // value directly from the PointerIntPair. See the comments in `InfoPtr` // for more details. - if (InfoPtr.getPointer().is()) + if (isa(InfoPtr.getPointer())) new_flags |= MultiArg; return new_flags; } diff --git a/clang/include/clang/Sema/ParsedAttr.h b/clang/include/clang/Sema/ParsedAttr.h index 22cbd0d90ee4..4fa5fbdb5a7f 100644 --- a/clang/include/clang/Sema/ParsedAttr.h +++ b/clang/include/clang/Sema/ParsedAttr.h @@ -392,19 +392,17 @@ public: } bool isArgExpr(unsigned Arg) const { - return Arg < NumArgs && getArg(Arg).is(); + return Arg < NumArgs && isa(getArg(Arg)); } - Expr *getArgAsExpr(unsigned Arg) const { - return getArg(Arg).get(); - } + Expr *getArgAsExpr(unsigned Arg) const { return cast(getArg(Arg)); } bool isArgIdent(unsigned Arg) const { - return Arg < NumArgs && getArg(Arg).is(); + return Arg < NumArgs && isa(getArg(Arg)); } IdentifierLoc *getArgAsIdent(unsigned Arg) const { - return getArg(Arg).get(); + return cast(getArg(Arg)); } const AvailabilityChange &getAvailabilityIntroduced() const { diff --git a/clang/include/clang/Sema/SemaConcept.h b/clang/include/clang/Sema/SemaConcept.h index 4b1abccb7741..fa5309a597b3 100644 --- a/clang/include/clang/Sema/SemaConcept.h +++ b/clang/include/clang/Sema/SemaConcept.h @@ -210,17 +210,17 @@ bool subsumes(const NormalForm &PDNF, const NormalForm &QCNF, bool Found = false; for (NormalFormConstraint Pia : Pi) { for (NormalFormConstraint Qjb : Qj) { - if (Pia.is() && - Qjb.is()) { - if (Pia.get()->subsumes( - *Qjb.get(), E)) { + if (isa(Pia) && + isa(Qjb)) { + if (cast(Pia)->subsumes( + *cast(Qjb), E)) { Found = true; break; } - } else if (Pia.is() && - Qjb.is()) { - if (E(*Pia.get(), - *Qjb.get())) { + } else if (isa(Pia) && + isa(Qjb)) { + if (E(*cast(Pia), + *cast(Qjb))) { Found = true; break; } diff --git a/clang/include/clang/Sema/SemaInternal.h b/clang/include/clang/Sema/SemaInternal.h index 41d05b2bfb07..27cda7198972 100644 --- a/clang/include/clang/Sema/SemaInternal.h +++ b/clang/include/clang/Sema/SemaInternal.h @@ -75,7 +75,7 @@ getDepthAndIndex(UnexpandedParameterPack UPP) { if (const auto *TTP = UPP.first.dyn_cast()) return std::make_pair(TTP->getDepth(), TTP->getIndex()); - return getDepthAndIndex(UPP.first.get()); + return getDepthAndIndex(cast(UPP.first)); } class TypoCorrectionConsumer : public VisibleDeclConsumer { diff --git a/clang/include/clang/Sema/Template.h b/clang/include/clang/Sema/Template.h index 6872d04cc4df..9800f75f676a 100644 --- a/clang/include/clang/Sema/Template.h +++ b/clang/include/clang/Sema/Template.h @@ -486,10 +486,10 @@ enum class TemplateSubstitutionKind : char { const Decl *D = I->first; llvm::PointerUnion &Stored = newScope->LocalDecls[D]; - if (I->second.is()) { - Stored = I->second.get(); + if (auto *D2 = dyn_cast(I->second)) { + Stored = D2; } else { - DeclArgumentPack *OldPack = I->second.get(); + DeclArgumentPack *OldPack = cast(I->second); DeclArgumentPack *NewPack = new DeclArgumentPack(*OldPack); Stored = NewPack; newScope->ArgumentPacks.push_back(NewPack); diff --git a/clang/lib/APINotes/APINotesManager.cpp b/clang/lib/APINotes/APINotesManager.cpp index 039d09fa7cf5..70d96c735503 100644 --- a/clang/lib/APINotes/APINotesManager.cpp +++ b/clang/lib/APINotes/APINotesManager.cpp @@ -374,9 +374,9 @@ APINotesManager::findAPINotes(SourceLocation Loc) { ++NumDirectoryCacheHits; // We've been redirected to another directory for answers. Follow it. - if (Known->second && Known->second.is()) { + if (Known->second && isa(Known->second)) { DirsVisited.insert(*Dir); - Dir = Known->second.get(); + Dir = cast(Known->second); continue; } diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp index cbcfefdc5254..211e940ce8b8 100644 --- a/clang/lib/Analysis/ThreadSafetyCommon.cpp +++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp @@ -326,7 +326,7 @@ til::SExpr *SExprBuilder::translateDeclRefExpr(const DeclRefExpr *DRE, } assert(I == 0); - return Ctx->FunArgs.get(); + return cast(Ctx->FunArgs); } } // Map the param back to the param of the original function declaration diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index f44b5e4c4b63..f0b6f7be6c84 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -324,9 +324,9 @@ llvm::Expected FileManager::getFileRef(StringRef Filename, *SeenFileEntries .insert({Status.getName(), FileEntryRef::MapValue(*UFE, DirInfo)}) .first; - assert(Redirection.second->V.is() && + assert(isa(Redirection.second->V) && "filename redirected to a non-canonical filename?"); - assert(Redirection.second->V.get() == UFE && + assert(cast(Redirection.second->V) == UFE && "filename from getStatValue() refers to wrong file"); // Cache the redirection in the previously-inserted entry, still available @@ -400,7 +400,7 @@ FileEntryRef FileManager::getVirtualFileRef(StringRef Filename, off_t Size, FileEntryRef::MapValue Value = *NamedFileEnt.second; if (LLVM_LIKELY(isa(Value.V))) return FileEntryRef(NamedFileEnt); - return FileEntryRef(*Value.V.get()); + return FileEntryRef(*cast(Value.V)); } // We've not seen this before, or the file is cached as non-existent. @@ -620,7 +620,7 @@ void FileManager::GetUniqueIDMapping( for (const auto &Entry : SeenFileEntries) { // Only return files that exist and are not redirected. - if (!Entry.getValue() || !Entry.getValue()->V.is()) + if (!Entry.getValue() || !isa(Entry.getValue()->V)) continue; FileEntryRef FE(Entry); // Add this file if it's the first one with the UID, or if its name is diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 2deb91f27e37..90809ef90858 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -4085,7 +4085,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy, CGF.Builder.CreateConstGEP(DependenciesArray, *P), KmpDependInfoTy); } else { assert(E && "Expected a non-null expression"); - LValue &PosLVal = *Pos.get(); + LValue &PosLVal = *cast(Pos); llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc()); Base = CGF.MakeAddrLValue( CGF.Builder.CreateGEP(CGF, DependenciesArray, Idx), KmpDependInfoTy); @@ -4113,7 +4113,7 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy, if (unsigned *P = Pos.dyn_cast()) { ++(*P); } else { - LValue &PosLVal = *Pos.get(); + LValue &PosLVal = *cast(Pos); llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc()); Idx = CGF.Builder.CreateNUWAdd(Idx, llvm::ConstantInt::get(Idx->getType(), 1)); diff --git a/clang/lib/Index/IndexDecl.cpp b/clang/lib/Index/IndexDecl.cpp index 19cff0398e21..6c971bf0f381 100644 --- a/clang/lib/Index/IndexDecl.cpp +++ b/clang/lib/Index/IndexDecl.cpp @@ -666,7 +666,7 @@ public: Template = D->getSpecializedTemplateOrPartial(); const Decl *SpecializationOf = isa(Template) - ? (Decl *)Template.get() + ? (Decl *)cast(Template) : cast(Template); if (!D->isThisDeclarationADefinition()) IndexCtx.indexNestedNameSpecifierLoc(D->getQualifierLoc(), D); -- cgit v1.2.3 From 88c18da37dfb10d570414bcb92ad075241f1b7c3 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 12 Dec 2024 16:17:21 -0800 Subject: [RISCV] Rename suffixes on VCPOP/VMSBF/VMSET/etc pseudos. NFC (#119785) These are suffixed with B1, B2, B4, B8, B16, B32, or B64 which I think these were supposed to match the naming of the vbool types from C where the number should be SEW/LMUL. So the smallest mask is 64 and the largest is 1. This provides a compact syntax for describing the 7 possible ratios between LMUL and SEW. We had the instruction names in the opposite order. --- llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp | 24 +++++++++++----------- llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td | 12 +++++------ .../instruction-select/rvv/render-vlop-rv32.mir | 16 +++++++-------- .../instruction-select/rvv/render-vlop-rv64.mir | 16 +++++++-------- .../instruction-select/rvv/vmclr-rv32.mir | 24 +++++++++++----------- .../instruction-select/rvv/vmclr-rv64.mir | 24 +++++++++++----------- .../CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir | 12 +++++------ 7 files changed, 64 insertions(+), 64 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp index c3922e38729d..7ae68ebadd3e 100644 --- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp @@ -1673,13 +1673,13 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) { VMNANDOpcode = RISCV::PseudoVMNAND_MM_##suffix; \ VMSetOpcode = RISCV::PseudoVMSET_M_##suffix_b; \ break; - CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F8, MF8, B1) - CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F4, MF4, B2) - CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F2, MF2, B4) + CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F8, MF8, B64) + CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F4, MF4, B32) + CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F2, MF2, B16) CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_1, M1, B8) - CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_2, M2, B16) - CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_4, M4, B32) - CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_8, M8, B64) + CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_2, M2, B4) + CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_4, M4, B2) + CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_8, M8, B1) #undef CASE_VMSLT_VMNAND_VMSET_OPCODES } SDValue SEW = CurDAG->getTargetConstant( @@ -1751,13 +1751,13 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) { VMSGTMaskOpcode = IsUnsigned ? RISCV::PseudoVMSGTU_VX_##suffix##_MASK \ : RISCV::PseudoVMSGT_VX_##suffix##_MASK; \ break; - CASE_VMSLT_OPCODES(LMUL_F8, MF8, B1) - CASE_VMSLT_OPCODES(LMUL_F4, MF4, B2) - CASE_VMSLT_OPCODES(LMUL_F2, MF2, B4) + CASE_VMSLT_OPCODES(LMUL_F8, MF8, B64) + CASE_VMSLT_OPCODES(LMUL_F4, MF4, B32) + CASE_VMSLT_OPCODES(LMUL_F2, MF2, B16) CASE_VMSLT_OPCODES(LMUL_1, M1, B8) - CASE_VMSLT_OPCODES(LMUL_2, M2, B16) - CASE_VMSLT_OPCODES(LMUL_4, M4, B32) - CASE_VMSLT_OPCODES(LMUL_8, M8, B64) + CASE_VMSLT_OPCODES(LMUL_2, M2, B4) + CASE_VMSLT_OPCODES(LMUL_4, M4, B2) + CASE_VMSLT_OPCODES(LMUL_8, M8, B1) #undef CASE_VMSLT_OPCODES } // Mask operations use the LMUL from the mask type. diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index d4770de44aef..4e25d683faee 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -422,13 +422,13 @@ class MTypeInfo { defset list AllMasks = { // vbool_t, = SEW/LMUL, we assume SEW=8 and corresponding LMUL. - def : MTypeInfo; - def : MTypeInfo; - def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; def : MTypeInfo; - def : MTypeInfo; - def : MTypeInfo; - def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; + def : MTypeInfo; } class VTypeInfoToWide { diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv32.mir b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv32.mir index 5600e351aa39..7610ebe7ed02 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv32.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv32.mir @@ -11,8 +11,8 @@ body: | bb.1: ; CHECK-LABEL: name: negative_vl ; CHECK: [[ADDI:%[0-9]+]]:gprnox0 = ADDI $x0, -2 - ; CHECK-NEXT: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 [[ADDI]], 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK-NEXT: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 [[ADDI]], 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -2 %1:vrb() = G_VMCLR_VL %0(s32) @@ -31,8 +31,8 @@ body: | ; CHECK: liveins: $x10 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gprnox0 = COPY $x10 - ; CHECK-NEXT: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 [[COPY]], 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK-NEXT: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 [[COPY]], 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = COPY $x10 %1:vrb() = G_VMCLR_VL %0(s32) @@ -48,8 +48,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: nonzero_vl - ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 1 %1:vrb() = G_VMCLR_VL %0(s32) @@ -65,8 +65,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: zero_vl - ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 0, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 0, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 0 %1:vrb() = G_VMCLR_VL %0(s32) diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv64.mir b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv64.mir index c2c0ed72be7b..de78ceb2f5e1 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv64.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/render-vlop-rv64.mir @@ -11,8 +11,8 @@ body: | bb.1: ; CHECK-LABEL: name: negative_vl ; CHECK: [[ADDI:%[0-9]+]]:gprnox0 = ADDI $x0, -2 - ; CHECK-NEXT: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 [[ADDI]], 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK-NEXT: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 [[ADDI]], 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -2 %1:vrb() = G_VMCLR_VL %0(s64) @@ -31,8 +31,8 @@ body: | ; CHECK: liveins: $x10 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gprnox0 = COPY $x10 - ; CHECK-NEXT: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 [[COPY]], 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK-NEXT: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 [[COPY]], 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = COPY $x10 %1:vrb() = G_VMCLR_VL %0(s64) @@ -48,8 +48,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: nonzero_vl - ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 1 %1:vrb() = G_VMCLR_VL %0(s64) @@ -65,8 +65,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: zero_vl - ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 0, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 0, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 0 %1:vrb() = G_VMCLR_VL %0(s64) diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv32.mir b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv32.mir index 1ef1312cc17c..ab91b3d80bd9 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv32.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv32.mir @@ -10,8 +10,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv1i1 - ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -1 %1:vrb() = G_VMCLR_VL %0(s32) @@ -27,8 +27,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv2i1 - ; CHECK: [[PseudoVMCLR_M_B2_:%[0-9]+]]:vr = PseudoVMCLR_M_B2 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B2_]] + ; CHECK: [[PseudoVMCLR_M_B32_:%[0-9]+]]:vr = PseudoVMCLR_M_B32 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B32_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -1 %1:vrb() = G_VMCLR_VL %0(s32) @@ -44,8 +44,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv4i1 - ; CHECK: [[PseudoVMCLR_M_B4_:%[0-9]+]]:vr = PseudoVMCLR_M_B4 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B4_]] + ; CHECK: [[PseudoVMCLR_M_B16_:%[0-9]+]]:vr = PseudoVMCLR_M_B16 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B16_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -1 %1:vrb() = G_VMCLR_VL %0(s32) @@ -78,8 +78,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv16i1 - ; CHECK: [[PseudoVMCLR_M_B16_:%[0-9]+]]:vr = PseudoVMCLR_M_B16 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B16_]] + ; CHECK: [[PseudoVMCLR_M_B4_:%[0-9]+]]:vr = PseudoVMCLR_M_B4 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B4_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -1 %1:vrb() = G_VMCLR_VL %0(s32) @@ -95,8 +95,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv32i1 - ; CHECK: [[PseudoVMCLR_M_B32_:%[0-9]+]]:vr = PseudoVMCLR_M_B32 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B32_]] + ; CHECK: [[PseudoVMCLR_M_B2_:%[0-9]+]]:vr = PseudoVMCLR_M_B2 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B2_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -1 %1:vrb() = G_VMCLR_VL %0(s32) @@ -112,8 +112,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv64i1 - ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] + ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s32) = G_CONSTANT i32 -1 %1:vrb() = G_VMCLR_VL %0(s32) diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv64.mir b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv64.mir index b7541cd4e96f..403a5f6a14ac 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv64.mir +++ b/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/rvv/vmclr-rv64.mir @@ -10,8 +10,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv1i1 - ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] + ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -1 %1:vrb() = G_VMCLR_VL %0(s64) @@ -27,8 +27,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv2i1 - ; CHECK: [[PseudoVMCLR_M_B2_:%[0-9]+]]:vr = PseudoVMCLR_M_B2 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B2_]] + ; CHECK: [[PseudoVMCLR_M_B32_:%[0-9]+]]:vr = PseudoVMCLR_M_B32 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B32_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -1 %1:vrb() = G_VMCLR_VL %0(s64) @@ -44,8 +44,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv4i1 - ; CHECK: [[PseudoVMCLR_M_B4_:%[0-9]+]]:vr = PseudoVMCLR_M_B4 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B4_]] + ; CHECK: [[PseudoVMCLR_M_B16_:%[0-9]+]]:vr = PseudoVMCLR_M_B16 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B16_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -1 %1:vrb() = G_VMCLR_VL %0(s64) @@ -78,8 +78,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv16i1 - ; CHECK: [[PseudoVMCLR_M_B16_:%[0-9]+]]:vr = PseudoVMCLR_M_B16 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B16_]] + ; CHECK: [[PseudoVMCLR_M_B4_:%[0-9]+]]:vr = PseudoVMCLR_M_B4 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B4_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -1 %1:vrb() = G_VMCLR_VL %0(s64) @@ -95,8 +95,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv32i1 - ; CHECK: [[PseudoVMCLR_M_B32_:%[0-9]+]]:vr = PseudoVMCLR_M_B32 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B32_]] + ; CHECK: [[PseudoVMCLR_M_B2_:%[0-9]+]]:vr = PseudoVMCLR_M_B2 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B2_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -1 %1:vrb() = G_VMCLR_VL %0(s64) @@ -112,8 +112,8 @@ tracksRegLiveness: true body: | bb.1: ; CHECK-LABEL: name: splat_zero_nxv64i1 - ; CHECK: [[PseudoVMCLR_M_B64_:%[0-9]+]]:vr = PseudoVMCLR_M_B64 -1, 0 /* e8 */ - ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B64_]] + ; CHECK: [[PseudoVMCLR_M_B1_:%[0-9]+]]:vr = PseudoVMCLR_M_B1 -1, 0 /* e8 */ + ; CHECK-NEXT: $v0 = COPY [[PseudoVMCLR_M_B1_]] ; CHECK-NEXT: PseudoRET implicit $v0 %0:gprb(s64) = G_CONSTANT i64 -1 %1:vrb() = G_VMCLR_VL %0(s64) diff --git a/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir b/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir index 55cefbbea81b..6f97abcd0fad 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir +++ b/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir @@ -512,9 +512,9 @@ body: | ; CHECK-NEXT: dead $x0 = PseudoVSETVLIX0 killed $x0, 23 /* e32, mf2, tu, mu */, implicit-def $vl, implicit-def $vtype, implicit $vl ; CHECK-NEXT: [[PseudoVLE32_V_MF2_MASK:%[0-9]+]]:vrnov0 = PseudoVLE32_V_MF2_MASK [[PseudoVMV_V_I_MF2_]], [[COPY]], $v0, -1, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype ; CHECK-NEXT: dead $x0 = PseudoVSETVLIX0 killed $x0, 197 /* e8, mf8, ta, ma */, implicit-def $vl, implicit-def $vtype, implicit $vl - ; CHECK-NEXT: [[PseudoVCPOP_M_B1_:%[0-9]+]]:gpr = PseudoVCPOP_M_B1 [[PseudoVMSEQ_VI_MF2_]], -1, 0 /* e8 */, implicit $vl, implicit $vtype + ; CHECK-NEXT: [[PseudoVCPOP_M_B64_:%[0-9]+]]:gpr = PseudoVCPOP_M_B64 [[PseudoVMSEQ_VI_MF2_]], -1, 0 /* e8 */, implicit $vl, implicit $vtype ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr = IMPLICIT_DEF - ; CHECK-NEXT: BEQ [[PseudoVCPOP_M_B1_]], $x0, %bb.3 + ; CHECK-NEXT: BEQ [[PseudoVCPOP_M_B64_]], $x0, %bb.3 ; CHECK-NEXT: PseudoBR %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2: @@ -543,7 +543,7 @@ body: | %5:vmv0 = PseudoVMSEQ_VI_MF2 killed %3, 0, -1, 5 $v0 = COPY %5 %6:vrnov0 = PseudoVLE32_V_MF2_MASK %4, killed %0, $v0, -1, 5, 0 - %7:gpr = PseudoVCPOP_M_B1 %5, -1, 0 + %7:gpr = PseudoVCPOP_M_B64 %5, -1, 0 %8:gpr = COPY $x0 BEQ killed %7, %8, %bb.3 PseudoBR %bb.2 @@ -906,8 +906,8 @@ body: | ; CHECK-NEXT: dead $x0 = PseudoVSETVLIX0 killed $x0, 216 /* e64, m1, ta, ma */, implicit-def $vl, implicit-def $vtype, implicit $vl ; CHECK-NEXT: [[PseudoVADD_VX_M1_:%[0-9]+]]:vr = PseudoVADD_VX_M1 undef $noreg, [[PseudoVID_V_M1_]], [[ADD]], -1, 6 /* e64 */, 0 /* tu, mu */, implicit $vl, implicit $vtype ; CHECK-NEXT: [[PseudoVMSLTU_VX_M1_:%[0-9]+]]:vr = PseudoVMSLTU_VX_M1 [[PseudoVADD_VX_M1_]], [[COPY1]], -1, 6 /* e64 */, implicit $vl, implicit $vtype - ; CHECK-NEXT: [[PseudoVCPOP_M_B1_:%[0-9]+]]:gpr = PseudoVCPOP_M_B1 [[PseudoVMSLTU_VX_M1_]], -1, 0 /* e8 */, implicit $vl, implicit $vtype - ; CHECK-NEXT: BEQ [[PseudoVCPOP_M_B1_]], $x0, %bb.3 + ; CHECK-NEXT: [[PseudoVCPOP_M_B64_:%[0-9]+]]:gpr = PseudoVCPOP_M_B64 [[PseudoVMSLTU_VX_M1_]], -1, 0 /* e8 */, implicit $vl, implicit $vtype + ; CHECK-NEXT: BEQ [[PseudoVCPOP_M_B64_]], $x0, %bb.3 ; CHECK-NEXT: PseudoBR %bb.2 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.2: @@ -952,7 +952,7 @@ body: | %61:gpr = ADD %12, %26 %27:vr = PseudoVADD_VX_M1 undef $noreg, %10, killed %61, -1, 6, 0 %62:vr = PseudoVMSLTU_VX_M1 %27, %11, -1, 6 - %63:gpr = PseudoVCPOP_M_B1 %62, -1, 0 + %63:gpr = PseudoVCPOP_M_B64 %62, -1, 0 %64:gpr = COPY $x0 BEQ killed %63, %64, %bb.3 PseudoBR %bb.2 -- cgit v1.2.3 From 08379d6430106094aeb24ac02b82ce8e89799e9e Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Thu, 12 Dec 2024 16:37:39 -0800 Subject: [memprof] Test the memprof-use pass with a YAML (#119779) This patch adds a test to verify that the call site that allocates cold bytes is annotated as such. The test is the first of its kind integrating the memprof-use pass and YAML. --- .../PGOProfile/memprof_annotate_yaml.test | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test diff --git a/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test b/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test new file mode 100644 index 000000000000..1ef963dec9e2 --- /dev/null +++ b/llvm/test/Transforms/PGOProfile/memprof_annotate_yaml.test @@ -0,0 +1,47 @@ +; REQUIRES: x86_64-linux + +; Make sure that we can ingest the MemProf profile in YAML and +; annotate a call to new as cold. + +; RUN: split-file %s %t +; RUN: llvm-profdata merge %t/memprof_annotate_yaml.yaml -o %t/memprof_annotate_yaml.memprofdata +; RUN: opt < %t/memprof_annotate_yaml.ll -passes='memprof-use' -S 2>&1 | FileCheck %s + +;--- memprof_annotate_yaml.yaml +--- +HeapProfileRecords: + - GUID: _Z3foov + AllocSites: + - Callstack: + - { Function: _Z3foov, LineOffset: 0, Column: 22, IsInlineFrame: false } + - { Function: main, LineOffset: 2, Column: 5, IsInlineFrame: false } + MemInfoBlock: + # With these numbers, llvm::memprof::getAllocType will determine that + # the call to new is cold. See MemoryProfileInfo.cpp for details. + TotalSize: 400 + AllocCount: 1 + TotalLifetimeAccessDensity: 1 + TotalLifetime: 1000000 + CallSites: [] +... +;--- memprof_annotate_yaml.ll +define dso_local ptr @_Z3foov() !dbg !4 { +entry: + %call = call ptr @_Znam(i64 4) #0, !dbg !5 +; CHECK: call ptr @_Znam(i64 4) #[[ATTR:[0-9]+]], + ret ptr %call +} + +declare ptr @_Znam(i64) + +attributes #0 = { builtin allocsize(0) } +; CHECK: attributes #[[ATTR]] = {{.*}} "memprof"="cold" + +!llvm.module.flags = !{!2, !3} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1) +!1 = !DIFile(filename: "t", directory: "/") +!2 = !{i32 7, !"Dwarf Version", i32 5} +!3 = !{i32 2, !"Debug Info Version", i32 3} +!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, unit: !0) +!5 = !DILocation(line: 1, column: 22, scope: !4) -- cgit v1.2.3 From 38eaea73cab3f427edd16d60035cf126f9a99cd0 Mon Sep 17 00:00:00 2001 From: pcc Date: Thu, 12 Dec 2024 16:52:58 -0800 Subject: TargetParser: AArch64: Add part numbers for Apple CPUs. Part numbers taken from: https://github.com/AsahiLinux/m1n1/blob/main/src/chickens.c Reviewers: ahmedbougacha, jroelofs Reviewed By: jroelofs Pull Request: https://github.com/llvm/llvm-project/pull/119777 --- llvm/lib/TargetParser/Host.cpp | 23 +++++++++++++++++++++++ llvm/unittests/TargetParser/Host.cpp | 3 +++ 2 files changed, 26 insertions(+) diff --git a/llvm/lib/TargetParser/Host.cpp b/llvm/lib/TargetParser/Host.cpp index b5119c8e2ac5..45b4cafc9959 100644 --- a/llvm/lib/TargetParser/Host.cpp +++ b/llvm/lib/TargetParser/Host.cpp @@ -347,6 +347,29 @@ StringRef sys::detail::getHostCPUNameForARM(StringRef ProcCpuinfoContent) { } } + if (Implementer == "0x61") { // Apple + return StringSwitch(Part) + .Case("0x020", "apple-m1") + .Case("0x021", "apple-m1") + .Case("0x022", "apple-m1") + .Case("0x023", "apple-m1") + .Case("0x024", "apple-m1") + .Case("0x025", "apple-m1") + .Case("0x028", "apple-m1") + .Case("0x029", "apple-m1") + .Case("0x030", "apple-m2") + .Case("0x031", "apple-m2") + .Case("0x032", "apple-m2") + .Case("0x033", "apple-m2") + .Case("0x034", "apple-m2") + .Case("0x035", "apple-m2") + .Case("0x038", "apple-m2") + .Case("0x039", "apple-m2") + .Case("0x049", "apple-m3") + .Case("0x048", "apple-m3") + .Default("generic"); + } + if (Implementer == "0x63") { // Arm China. return StringSwitch(Part) .Case("0x132", "star-mc1") diff --git a/llvm/unittests/TargetParser/Host.cpp b/llvm/unittests/TargetParser/Host.cpp index 67c727a6c1c5..a478c2e6d92d 100644 --- a/llvm/unittests/TargetParser/Host.cpp +++ b/llvm/unittests/TargetParser/Host.cpp @@ -143,6 +143,9 @@ TEST(getLinuxHostCPUName, AArch64) { EXPECT_EQ(sys::detail::getHostCPUNameForARM("CPU implementer : 0x46\n" "CPU part : 0x003"), "fujitsu-monaka"); + EXPECT_EQ(sys::detail::getHostCPUNameForARM("CPU implementer : 0x61\n" + "CPU part : 0x039"), + "apple-m2"); // MSM8992/4 weirdness StringRef MSM8992ProcCpuInfo = R"( -- cgit v1.2.3 From 768754807f17754fb450ec672779b827ad5df4b4 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Thu, 12 Dec 2024 17:20:48 -0800 Subject: [InstCombine] Optimistically allow multiple shufflevector uses in foldOpPhi (#114278) We would like to optimize situations of the form that happen after loop vectorization+SROA: ``` loop: %phi = phi zeroinitializer, %interleaved %deinterleave_a = shufflevector %phi, poison ; pick half of the lanes %deinterleave_b = shufflevector %phi, posion ; pick remaining lanes ... %a = ... %b = ... %interleaved = shufflevector %a, %b ; interleave lanes of a+b ``` where the interleave and de-interleave shuffle operations cancel each other out. This could be handled by `foldOpPhi` but does not currently work because it does not proceed when there are multiple uses of the `Phi` operation. This extends `foldOpPhi` to allow multiple `shufflevector` uses when they are shown to simplify for all `Phi` input values. --- .../Transforms/InstCombine/InstCombineInternal.h | 3 +- .../InstCombine/InstCombineVectorOps.cpp | 2 +- .../InstCombine/InstructionCombining.cpp | 34 ++++-- .../InstCombine/vec_shuffle-phi-multiuse.ll | 115 +++++++++++++++++++++ 4 files changed, 141 insertions(+), 13 deletions(-) create mode 100644 llvm/test/Transforms/InstCombine/vec_shuffle-phi-multiuse.ll diff --git a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h index 28474fec8238..3a074ee70dc4 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h +++ b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h @@ -600,7 +600,8 @@ public: /// Given a binary operator, cast instruction, or select which has a PHI node /// as operand #0, see if we can fold the instruction into the PHI (which is /// only possible if all operands to the PHI are constants). - Instruction *foldOpIntoPhi(Instruction &I, PHINode *PN); + Instruction *foldOpIntoPhi(Instruction &I, PHINode *PN, + bool AllowMultipleUses = false); /// For a binary operator with 2 phi operands, try to hoist the binary /// operation before the phi. This can result in fewer instructions in diff --git a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp index 09eafd09451b..302968f88cc2 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp @@ -2978,7 +2978,7 @@ Instruction *InstCombinerImpl::visitShuffleVectorInst(ShuffleVectorInst &SVI) { } } if (auto *PN = dyn_cast(LHS)) { - if (Instruction *I = foldOpIntoPhi(SVI, PN)) + if (Instruction *I = foldOpIntoPhi(SVI, PN, /*AllowMultipleUses=*/true)) return I; } } diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index 8f55e5b3cc28..af537da8fa27 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -1763,7 +1763,8 @@ static Value *simplifyInstructionWithPHI(Instruction &I, PHINode *PN, return nullptr; } -Instruction *InstCombinerImpl::foldOpIntoPhi(Instruction &I, PHINode *PN) { +Instruction *InstCombinerImpl::foldOpIntoPhi(Instruction &I, PHINode *PN, + bool AllowMultipleUses) { unsigned NumPHIValues = PN->getNumIncomingValues(); if (NumPHIValues == 0) return nullptr; @@ -1771,7 +1772,9 @@ Instruction *InstCombinerImpl::foldOpIntoPhi(Instruction &I, PHINode *PN) { // We normally only transform phis with a single use. However, if a PHI has // multiple uses and they are all the same operation, we can fold *all* of the // uses into the PHI. - if (!PN->hasOneUse()) { + bool OneUse = PN->hasOneUse(); + bool IdenticalUsers = false; + if (!AllowMultipleUses && !OneUse) { // Walk the use list for the instruction, comparing them to I. for (User *U : PN->users()) { Instruction *UI = cast(U); @@ -1779,6 +1782,7 @@ Instruction *InstCombinerImpl::foldOpIntoPhi(Instruction &I, PHINode *PN) { return nullptr; } // Otherwise, we can replace *all* users with the new PHI we form. + IdenticalUsers = true; } // Check that all operands are phi-translatable. @@ -1829,6 +1833,9 @@ Instruction *InstCombinerImpl::foldOpIntoPhi(Instruction &I, PHINode *PN) { continue; } + if (!OneUse && !IdenticalUsers) + return nullptr; + if (SeenNonSimplifiedInVal) return nullptr; // More than one non-simplified value. SeenNonSimplifiedInVal = true; @@ -1890,17 +1897,22 @@ Instruction *InstCombinerImpl::foldOpIntoPhi(Instruction &I, PHINode *PN) { for (unsigned i = 0; i != NumPHIValues; ++i) NewPN->addIncoming(NewPhiValues[i], PN->getIncomingBlock(i)); - for (User *U : make_early_inc_range(PN->users())) { - Instruction *User = cast(U); - if (User == &I) - continue; - replaceInstUsesWith(*User, NewPN); - eraseInstFromFunction(*User); + if (IdenticalUsers) { + for (User *U : make_early_inc_range(PN->users())) { + Instruction *User = cast(U); + if (User == &I) + continue; + replaceInstUsesWith(*User, NewPN); + eraseInstFromFunction(*User); + } + OneUse = true; } - replaceAllDbgUsesWith(const_cast(*PN), - const_cast(*NewPN), - const_cast(*PN), DT); + if (OneUse) { + replaceAllDbgUsesWith(const_cast(*PN), + const_cast(*NewPN), + const_cast(*PN), DT); + } return replaceInstUsesWith(I, NewPN); } diff --git a/llvm/test/Transforms/InstCombine/vec_shuffle-phi-multiuse.ll b/llvm/test/Transforms/InstCombine/vec_shuffle-phi-multiuse.ll new file mode 100644 index 000000000000..44b25bb6fd72 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/vec_shuffle-phi-multiuse.ll @@ -0,0 +1,115 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 +; RUN: opt < %s -S -passes=instcombine | FileCheck %s + +define <4 x i16> @f0(i1 %c, ptr %p0, ptr %p1) { +; CHECK-LABEL: define <4 x i16> @f0( +; CHECK-SAME: i1 [[C:%.*]], ptr [[P0:%.*]], ptr [[P1:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*]]: +; CHECK-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[MERGE:.*]] +; CHECK: [[THEN]]: +; CHECK-NEXT: [[LOAD0:%.*]] = load <4 x i16>, ptr [[P0]], align 16 +; CHECK-NEXT: [[LOAD1:%.*]] = load <4 x i16>, ptr [[P1]], align 16 +; CHECK-NEXT: [[TMP0:%.*]] = sub <4 x i16> [[LOAD0]], [[LOAD1]] +; CHECK-NEXT: br label %[[MERGE]] +; CHECK: [[MERGE]]: +; CHECK-NEXT: [[SUB:%.*]] = phi <4 x i16> [ , %[[ENTRY]] ], [ [[TMP0]], %[[THEN]] ] +; CHECK-NEXT: ret <4 x i16> [[SUB]] +; +entry: + br i1 %c, label %then, label %merge + +then: + %load0 = load <4 x i16>, ptr %p0, align 16 + %load1 = load <4 x i16>, ptr %p1, align 16 + %interleave = shufflevector <4 x i16> %load0, <4 x i16> %load1, <8 x i32> + br label %merge + +merge: + %phi = phi <8 x i16> [, %entry], [%interleave, %then] + %shuf0 = shufflevector <8 x i16> %phi, <8 x i16> poison, <4 x i32> + %shuf1 = shufflevector <8 x i16> %phi, <8 x i16> poison, <4 x i32> + %sub = sub <4 x i16> %shuf0, %shuf1 + ret <4 x i16> %sub +} + +define void @deinterleave_interleave(ptr %p_begin, ptr %p_end, ptr %out) { +; CHECK-LABEL: define void @deinterleave_interleave( +; CHECK-SAME: ptr [[P_BEGIN:%.*]], ptr [[P_END:%.*]], ptr [[OUT:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*]]: +; CHECK-NEXT: br label %[[LOOP:.*]] +; CHECK: [[LOOP]]: +; CHECK-NEXT: [[ACC:%.*]] = phi <4 x float> [ zeroinitializer, %[[ENTRY]] ], [ [[SUM_LOWS:%.*]], %[[LOOP]] ] +; CHECK-NEXT: [[ODDS:%.*]] = phi <4 x float> [ zeroinitializer, %[[ENTRY]] ], [ [[SUM_HIGHS:%.*]], %[[LOOP]] ] +; CHECK-NEXT: [[P:%.*]] = phi ptr [ [[P_BEGIN]], %[[ENTRY]] ], [ [[P_INC:%.*]], %[[LOOP]] ] +; CHECK-NEXT: [[VAL:%.*]] = load <4 x i8>, ptr [[P]], align 4 +; CHECK-NEXT: [[HIGHS:%.*]] = ashr <4 x i8> [[VAL]], splat (i8 4) +; CHECK-NEXT: [[LOWS:%.*]] = and <4 x i8> [[VAL]], splat (i8 15) +; CHECK-NEXT: [[HIGHS_F:%.*]] = sitofp <4 x i8> [[HIGHS]] to <4 x float> +; CHECK-NEXT: [[LOWS_F:%.*]] = uitofp nneg <4 x i8> [[LOWS]] to <4 x float> +; CHECK-NEXT: [[SUM_LOWS]] = fadd <4 x float> [[ACC]], [[LOWS_F]] +; CHECK-NEXT: [[SUM_HIGHS]] = fadd <4 x float> [[ODDS]], [[HIGHS_F]] +; CHECK-NEXT: [[P_INC]] = getelementptr inbounds nuw i8, ptr [[P]], i64 4 +; CHECK-NEXT: [[C:%.*]] = icmp eq ptr [[P_INC]], [[P_END]] +; CHECK-NEXT: br i1 [[C]], label %[[EXIT:.*]], label %[[LOOP]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: [[INTERLEAVE:%.*]] = shufflevector <4 x float> [[SUM_LOWS]], <4 x float> [[SUM_HIGHS]], <8 x i32> +; CHECK-NEXT: store <8 x float> [[INTERLEAVE]], ptr [[OUT]], align 4 +; CHECK-NEXT: ret void +; +entry: + br label %loop + +loop: + %acc = phi <8 x float> [ zeroinitializer, %entry ], [ %interleave, %loop ] + %p = phi ptr [%p_begin, %entry ], [%p_inc, %loop] + + %evens = shufflevector <8 x float> %acc, <8 x float> poison, <4 x i32> + %odds = shufflevector <8 x float> %acc, <8 x float> poison, <4 x i32> + + %val = load <4 x i8>, ptr %p, align 4 + %highs = ashr <4 x i8> %val, + %lows = and <4 x i8> %val, + + %highs_f = sitofp <4 x i8> %highs to <4 x float> + %lows_f = sitofp <4 x i8> %lows to <4 x float> + + %sum_lows = fadd <4 x float> %evens, %lows_f + %sum_highs = fadd <4 x float> %odds, %highs_f + + %interleave = shufflevector <4 x float> %sum_lows, <4 x float> %sum_highs, <8 x i32> + + %p_inc = getelementptr inbounds i8, ptr %p, i32 4 + %c = icmp eq ptr %p_inc, %p_end + br i1 %c, label %exit, label %loop + +exit: + store <8 x float> %interleave, ptr %out, align 4 + ret void +} + +define <4 x i16> @f1(i1 %c, ptr %p) { +; CHECK-LABEL: define <4 x i16> @f1( +; CHECK-SAME: i1 [[C:%.*]], ptr [[P:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*]]: +; CHECK-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[MERGE:.*]] +; CHECK: [[THEN]]: +; CHECK-NEXT: store i32 42, ptr [[P]], align 4 +; CHECK-NEXT: br label %[[MERGE]] +; CHECK: [[MERGE]]: +; CHECK-NEXT: [[XOR:%.*]] = phi <4 x i16> [ , %[[ENTRY]] ], [ , %[[THEN]] ] +; CHECK-NEXT: ret <4 x i16> [[XOR]] +; +entry: + br i1 %c, label %then, label %merge + +then: + store i32 42, ptr %p, align 4 + br label %merge + +merge: + %phi = phi <4 x i16> [, %entry], [, %then] + %shuf0 = shufflevector <4 x i16> %phi, <4 x i16> poison, <4 x i32> + %add1 = add <4 x i16> %phi, + %xor = xor <4 x i16> %shuf0, %add1 + ret <4 x i16> %xor +} -- cgit v1.2.3 From 51001f87f1b1136554a73228fac2bde9735b2d06 Mon Sep 17 00:00:00 2001 From: Feng Zou Date: Fri, 13 Dec 2024 09:47:52 +0800 Subject: [X86][MC] Fix offset for R_X86_64_CODE_6_GOTTPOFF fixup (#119496) 1. Fix the offset for R_X86_64_CODE_6_GOTTPOFF fixup, which is introduced by #117277. It should be biased with the size of the immediate field. Related tests are updated. 2. Rename reloc_riprel_6byte_relax to reloc_riprel_4byte_relax_evex as the number of bytes represents the size of fixup, and "evex" suffix is added as it's used for APX NDD/NF instructions with EVEX prefix. 3. Remove incorrectly setting R_X86_64_CODE_6_GOTTPOFF relocation type for APX NDD/NF instructions with GOTPCREL symbol reference modifier. --- lld/test/ELF/tls-opt.s | 18 +++++++++--------- lld/test/ELF/x86-64-tls-ie-local.s | 20 ++++++++++---------- llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp | 4 ++-- .../Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp | 6 ++---- llvm/lib/Target/X86/MCTargetDesc/X86FixupKinds.h | 5 +++-- .../lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp | 8 ++++---- .../Target/X86/MCTargetDesc/X86MachObjectWriter.cpp | 4 ++-- .../X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp | 2 +- llvm/test/MC/ELF/relocation.s | 10 +++++----- 9 files changed, 38 insertions(+), 39 deletions(-) diff --git a/lld/test/ELF/tls-opt.s b/lld/test/ELF/tls-opt.s index 08cc52afd641..466dda0ef2e7 100644 --- a/lld/test/ELF/tls-opt.s +++ b/lld/test/ELF/tls-opt.s @@ -28,17 +28,17 @@ // DISASM-NEXT: addq $-8, %r28 // DISASM-NEXT: addq $-4, %r16 # NDD -// DISASM-NEXT: addq $-10, %r16, %r16 -// DISASM-NEXT: addq $-10, %r16, %r20 -// DISASM-NEXT: addq $-10, %r16, %rax -// DISASM-NEXT: addq $-10, %rax, %r16 -// DISASM-NEXT: addq $-10, %r8, %r16 -// DISASM-NEXT: addq $-10, %rax, %r12 +// DISASM-NEXT: addq $-8, %r16, %r16 +// DISASM-NEXT: addq $-8, %r16, %r20 +// DISASM-NEXT: addq $-8, %r16, %rax +// DISASM-NEXT: addq $-8, %rax, %r16 +// DISASM-NEXT: addq $-8, %r8, %r16 +// DISASM-NEXT: addq $-8, %rax, %r12 # NDD + NF -// DISASM-NEXT: {nf} addq $-10, %r8, %r16 -// DISASM-NEXT: {nf} addq $-10, %rax, %r12 +// DISASM-NEXT: {nf} addq $-8, %r8, %r16 +// DISASM-NEXT: {nf} addq $-8, %rax, %r12 # NF -// DISASM-NEXT: {nf} addq $-10, %r12 +// DISASM-NEXT: {nf} addq $-8, %r12 // LD to LE: // DISASM-NEXT: movq %fs:0, %rax diff --git a/lld/test/ELF/x86-64-tls-ie-local.s b/lld/test/ELF/x86-64-tls-ie-local.s index 0a104e7d6727..704ecacc9619 100644 --- a/lld/test/ELF/x86-64-tls-ie-local.s +++ b/lld/test/ELF/x86-64-tls-ie-local.s @@ -17,21 +17,21 @@ ## &.got[1] - 0x1286 = 0x2380 - 0x1286 = 4346 ## &.got[2] - 0x128e = 0x2378 - 0x128e = 4330 ## &.got[3] - 0x1296 = 0x2380 - 0x1296 = 4330 -## &.got[0] - 0x12a0 = 0x2376 - 0x12a0 = 4310 -## &.got[1] - 0x12aa = 0x237e - 0x12aa = 4308 -## &.got[0] - 0x12b4 = 0x2376 - 0x12b4 = 4290 -## &.got[1] - 0x12be = 0x237e - 0x12be = 4288 -## &.got[0] - 0x12c8 = 0x2376 - 0x12c8 = 4270 +## &.got[0] - 0x12a0 = 0x2378 - 0x12a0 = 4312 +## &.got[1] - 0x12aa = 0x2380 - 0x12aa = 4310 +## &.got[0] - 0x12b4 = 0x2378 - 0x12b4 = 4292 +## &.got[1] - 0x12be = 0x2380 - 0x12be = 4290 +## &.got[0] - 0x12c8 = 0x2378 - 0x12c8 = 4272 # CHECK: 1278: addq 4345(%rip), %rax # CHECK-NEXT: 127f: addq 4346(%rip), %rax # CHECK-NEXT: 1286: addq 4330(%rip), %r16 # CHECK-NEXT: 128e: addq 4330(%rip), %r16 -# CHECK-NEXT: 1296: addq %r8, 4310(%rip), %r16 -# CHECK-NEXT: 12a0: addq 4308(%rip), %rax, %r12 -# CHECK-NEXT: 12aa: {nf} addq %r8, 4290(%rip), %r16 -# CHECK-NEXT: 12b4: {nf} addq 4288(%rip), %rax, %r12 -# CHECK-NEXT: 12be: {nf} addq 4270(%rip), %r12 +# CHECK-NEXT: 1296: addq %r8, 4312(%rip), %r16 +# CHECK-NEXT: 12a0: addq 4310(%rip), %rax, %r12 +# CHECK-NEXT: 12aa: {nf} addq %r8, 4292(%rip), %r16 +# CHECK-NEXT: 12b4: {nf} addq 4290(%rip), %rax, %r12 +# CHECK-NEXT: 12be: {nf} addq 4272(%rip), %r12 addq foo@GOTTPOFF(%rip), %rax addq bar@GOTTPOFF(%rip), %rax diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp index 01b6c84419fc..ef917568b5a5 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp @@ -634,7 +634,7 @@ const MCFixupKindInfo &X86AsmBackend::getFixupKindInfo(MCFixupKind Kind) const { {"reloc_riprel_4byte_relax", 0, 32, MCFixupKindInfo::FKF_IsPCRel}, {"reloc_riprel_4byte_relax_rex", 0, 32, MCFixupKindInfo::FKF_IsPCRel}, {"reloc_riprel_4byte_relax_rex2", 0, 32, MCFixupKindInfo::FKF_IsPCRel}, - {"reloc_riprel_6byte_relax", 0, 32, MCFixupKindInfo::FKF_IsPCRel}, + {"reloc_riprel_4byte_relax_evex", 0, 32, MCFixupKindInfo::FKF_IsPCRel}, {"reloc_signed_4byte", 0, 32, 0}, {"reloc_signed_4byte_relax", 0, 32, 0}, {"reloc_global_offset_table", 0, 32, 0}, @@ -684,7 +684,7 @@ static unsigned getFixupKindSize(unsigned Kind) { case X86::reloc_riprel_4byte_relax_rex2: case X86::reloc_riprel_4byte_movq_load: case X86::reloc_riprel_4byte_movq_load_rex2: - case X86::reloc_riprel_6byte_relax: + case X86::reloc_riprel_4byte_relax_evex: case X86::reloc_signed_4byte: case X86::reloc_signed_4byte_relax: case X86::reloc_global_offset_table: diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp index 29a1af97d24f..cc712055a861 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp @@ -77,7 +77,7 @@ static X86_64RelType getType64(MCFixupKind Kind, case X86::reloc_riprel_4byte_relax_rex2: case X86::reloc_riprel_4byte_movq_load: case X86::reloc_riprel_4byte_movq_load_rex2: - case X86::reloc_riprel_6byte_relax: + case X86::reloc_riprel_4byte_relax_evex: return RT64_32; case X86::reloc_branch_4byte_pcrel: Modifier = MCSymbolRefExpr::VK_PLT; @@ -203,7 +203,7 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc, if ((unsigned)Kind == X86::reloc_riprel_4byte_movq_load_rex2 || (unsigned)Kind == X86::reloc_riprel_4byte_relax_rex2) return ELF::R_X86_64_CODE_4_GOTTPOFF; - else if ((unsigned)Kind == X86::reloc_riprel_6byte_relax) + else if ((unsigned)Kind == X86::reloc_riprel_4byte_relax_evex) return ELF::R_X86_64_CODE_6_GOTTPOFF; return ELF::R_X86_64_GOTTPOFF; case MCSymbolRefExpr::VK_TLSLD: @@ -230,8 +230,6 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc, case X86::reloc_riprel_4byte_relax_rex2: case X86::reloc_riprel_4byte_movq_load_rex2: return ELF::R_X86_64_CODE_4_GOTPCRELX; - case X86::reloc_riprel_6byte_relax: - return ELF::R_X86_64_CODE_6_GOTTPOFF; } llvm_unreachable("unexpected relocation type!"); case MCSymbolRefExpr::VK_GOTPCREL_NORELAX: diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86FixupKinds.h b/llvm/lib/Target/X86/MCTargetDesc/X86FixupKinds.h index 52592a5a13b9..9b951973ab19 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86FixupKinds.h +++ b/llvm/lib/Target/X86/MCTargetDesc/X86FixupKinds.h @@ -24,8 +24,9 @@ enum Fixups { // instruction with rex prefix reloc_riprel_4byte_relax_rex2, // 32-bit rip-relative in relaxable // instruction with rex2 prefix - reloc_riprel_6byte_relax, // 32-bit rip-relative in relaxable - // instruction with APX NDD + reloc_riprel_4byte_relax_evex, // 32-bit rip-relative in relaxable + // instruction of APX NDD/NF with + // EVEX prefix reloc_signed_4byte, // 32-bit signed. Unlike FK_Data_4 // this will be sign extended at // runtime. diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp index 052d732e4d01..55fb9f54c539 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp @@ -572,15 +572,15 @@ void X86MCCodeEmitter::emitImmediate(const MCOperand &DispOp, SMLoc Loc, FixupKind == MCFixupKind(X86::reloc_riprel_4byte_relax) || FixupKind == MCFixupKind(X86::reloc_riprel_4byte_relax_rex) || FixupKind == MCFixupKind(X86::reloc_riprel_4byte_relax_rex2) || - FixupKind == MCFixupKind(X86::reloc_branch_4byte_pcrel)) { + FixupKind == MCFixupKind(X86::reloc_branch_4byte_pcrel) || + FixupKind == MCFixupKind(X86::reloc_riprel_4byte_relax_evex)) { ImmOffset -= 4; // If this is a pc-relative load off _GLOBAL_OFFSET_TABLE_: // leaq _GLOBAL_OFFSET_TABLE_(%rip), %r15 // this needs to be a GOTPC32 relocation. if (startsWithGlobalOffsetTable(Expr) != GOT_None) FixupKind = MCFixupKind(X86::reloc_global_offset_table); - } else if (FixupKind == MCFixupKind(X86::reloc_riprel_6byte_relax)) - ImmOffset -= 6; + } if (FixupKind == FK_PCRel_2) ImmOffset -= 2; @@ -677,7 +677,7 @@ void X86MCCodeEmitter::emitMemModRMByte( case X86::ADD64mr_ND: case X86::ADD64mr_NF_ND: case X86::ADD64rm_NF_ND: - return X86::reloc_riprel_6byte_relax; + return X86::reloc_riprel_4byte_relax_evex; } }(); diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp index 413650e90de6..69eeb09ebf2d 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp @@ -70,7 +70,7 @@ static bool isFixupKindRIPRel(unsigned Kind) { Kind == X86::reloc_riprel_4byte_relax || Kind == X86::reloc_riprel_4byte_relax_rex || Kind == X86::reloc_riprel_4byte_relax_rex2 || - Kind == X86::reloc_riprel_6byte_relax; + Kind == X86::reloc_riprel_4byte_relax_evex; } static unsigned getFixupKindLog2Size(unsigned Kind) { @@ -92,7 +92,7 @@ static unsigned getFixupKindLog2Size(unsigned Kind) { case X86::reloc_signed_4byte: case X86::reloc_signed_4byte_relax: case X86::reloc_branch_4byte_pcrel: - case X86::reloc_riprel_6byte_relax: + case X86::reloc_riprel_4byte_relax_evex: case FK_Data_4: return 2; case FK_Data_8: return 3; } diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp index 48d4707bbe1e..f4ac242e9f15 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp @@ -70,7 +70,7 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx, case X86::reloc_riprel_4byte_relax: case X86::reloc_riprel_4byte_relax_rex: case X86::reloc_riprel_4byte_relax_rex2: - case X86::reloc_riprel_6byte_relax: + case X86::reloc_riprel_4byte_relax_evex: case X86::reloc_branch_4byte_pcrel: return COFF::IMAGE_REL_AMD64_REL32; case FK_Data_4: diff --git a/llvm/test/MC/ELF/relocation.s b/llvm/test/MC/ELF/relocation.s index 25497a003f85..65a9b6f72d0a 100644 --- a/llvm/test/MC/ELF/relocation.s +++ b/llvm/test/MC/ELF/relocation.s @@ -90,11 +90,11 @@ weak_sym: // CHECK-NEXT: 0x2D R_X86_64_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC // CHECK-NEXT: 0x35 R_X86_64_CODE_4_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC // CHECK-NEXT: 0x3D R_X86_64_CODE_4_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC -// CHECK-NEXT: 0x47 R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFA -// CHECK-NEXT: 0x51 R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFA -// CHECK-NEXT: 0x5B R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFA -// CHECK-NEXT: 0x65 R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFA -// CHECK-NEXT: 0x6F R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFA +// CHECK-NEXT: 0x47 R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC +// CHECK-NEXT: 0x51 R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC +// CHECK-NEXT: 0x5B R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC +// CHECK-NEXT: 0x65 R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC +// CHECK-NEXT: 0x6F R_X86_64_CODE_6_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC // CHECK-NEXT: 0x76 R_X86_64_TLSGD foo 0xFFFFFFFFFFFFFFFC // CHECK-NEXT: 0x7D R_X86_64_TPOFF32 foo 0x0 // CHECK-NEXT: 0x84 R_X86_64_TLSLD foo 0xFFFFFFFFFFFFFFFC -- cgit v1.2.3 From 3de5e8b23f5c145b13d930eb5019566d3a6f88d5 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Thu, 12 Dec 2024 18:03:12 -0800 Subject: [libc++abi] Build cxxabi with sanitizers (#119612) --- libcxxabi/CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt index 158d61ff4fcb..6dcfc51e5532 100644 --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -264,6 +264,49 @@ if (CXX_SUPPORTS_NOSTDINCXX_FLAG) string(REPLACE "-stdlib=libstdc++" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") endif() +function(get_sanitizer_flags OUT_VAR USE_SANITIZER) + set(SANITIZER_FLAGS) + set(USE_SANITIZER "${USE_SANITIZER}") + # NOTE: LLVM_USE_SANITIZER checks for a UNIX like system instead of MSVC. + # But we don't have LLVM_ON_UNIX so checking for MSVC is the best we can do. + if (USE_SANITIZER AND NOT MSVC) + append_flags_if_supported(SANITIZER_FLAGS "-fno-omit-frame-pointer") + append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only") + + if (NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" AND + NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") + append_flags_if_supported(SANITIZER_FLAGS "-gline-tables-only") + endif() + if (USE_SANITIZER STREQUAL "Address") + append_flags(SANITIZER_FLAGS "-fsanitize=address") + elseif (USE_SANITIZER STREQUAL "HWAddress") + append_flags(SANITIZER_FLAGS "-fsanitize=hwaddress") + elseif (USE_SANITIZER MATCHES "Memory(WithOrigins)?") + append_flags(SANITIZER_FLAGS -fsanitize=memory) + if (USE_SANITIZER STREQUAL "MemoryWithOrigins") + append_flags(SANITIZER_FLAGS "-fsanitize-memory-track-origins") + endif() + elseif (USE_SANITIZER STREQUAL "Undefined") + append_flags(SANITIZER_FLAGS "-fsanitize=undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all") + elseif (USE_SANITIZER STREQUAL "Address;Undefined" OR + USE_SANITIZER STREQUAL "Undefined;Address") + append_flags(SANITIZER_FLAGS "-fsanitize=address,undefined" "-fno-sanitize=vptr,function" "-fno-sanitize-recover=all") + elseif (USE_SANITIZER STREQUAL "Thread") + append_flags(SANITIZER_FLAGS -fsanitize=thread) + elseif (USE_SANITIZER STREQUAL "DataFlow") + append_flags(SANITIZER_FLAGS -fsanitize=dataflow) + else() + message(WARNING "Unsupported value of LLVM_USE_SANITIZER: ${USE_SANITIZER}") + endif() + elseif(USE_SANITIZER AND MSVC) + message(WARNING "LLVM_USE_SANITIZER is not supported on this platform.") + endif() + set(${OUT_VAR} "${SANITIZER_FLAGS}" PARENT_SCOPE) +endfunction() + +get_sanitizer_flags(SANITIZER_FLAGS "${LLVM_USE_SANITIZER}") +list(APPEND LIBCXXABI_COMPILE_FLAGS ${SANITIZER_FLAGS}) + # Let the library headers know they are currently being used to build the # library. add_definitions(-D_LIBCXXABI_BUILDING_LIBRARY) -- cgit v1.2.3 From 6c4e70fcbbb62f38a5aab085634de5faaa5cf729 Mon Sep 17 00:00:00 2001 From: wanglei Date: Fri, 13 Dec 2024 10:06:55 +0800 Subject: [lldb][Process] Introduce LoongArch64 hw break/watchpoint support This patch adds support for setting/clearing hardware watchpoints and breakpoints on LoongArch 64-bit hardware. Refer to the following document for the hw break/watchpoint: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#control-and-status-registers-related-to-watchpoints Fix Failed Tests: lldb-shell :: Subprocess/clone-follow-child-wp.test lldb-shell :: Subprocess/clone-follow-parent-wp.test lldb-shell :: Subprocess/fork-follow-child-wp.test lldb-shell :: Subprocess/fork-follow-parent-wp.test lldb-shell :: Subprocess/vfork-follow-child-wp.test lldb-shell :: Subprocess/vfork-follow-parent-wp.test lldb-shell :: Watchpoint/ExpressionLanguage.test Depends on: #118043 Reviewed By: SixWeining Pull Request: https://github.com/llvm/llvm-project/pull/118770 --- .../NativeRegisterContextLinux_loongarch64.cpp | 80 ++++++++++++++++++++++ .../Linux/NativeRegisterContextLinux_loongarch64.h | 9 ++- lldb/source/Plugins/Process/Utility/CMakeLists.txt | 1 + .../NativeRegisterContextDBReg_loongarch.cpp | 65 ++++++++++++++++++ .../Utility/NativeRegisterContextDBReg_loongarch.h | 34 +++++++++ .../GDBRemoteCommunicationServerCommon.cpp | 3 +- lldb/source/Target/Process.cpp | 3 +- 7 files changed, 192 insertions(+), 3 deletions(-) create mode 100644 lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.cpp create mode 100644 lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.h diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.cpp index f4d1bb297049..9ffc8ada920c 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.cpp @@ -11,6 +11,7 @@ #include "NativeRegisterContextLinux_loongarch64.h" #include "lldb/Host/HostInfo.h" +#include "lldb/Host/linux/Ptrace.h" #include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/Log.h" #include "lldb/Utility/RegisterValue.h" @@ -62,6 +63,16 @@ NativeRegisterContextLinux_loongarch64::NativeRegisterContextLinux_loongarch64( ::memset(&m_fpr, 0, sizeof(m_fpr)); ::memset(&m_gpr, 0, sizeof(m_gpr)); + ::memset(&m_hwp_regs, 0, sizeof(m_hwp_regs)); + ::memset(&m_hbp_regs, 0, sizeof(m_hbp_regs)); + + // Refer to: + // https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#control-and-status-registers-related-to-watchpoints + // 14 is just a maximum value, query hardware for actual watchpoint count. + m_max_hwp_supported = 14; + m_max_hbp_supported = 14; + m_refresh_hwdebug_info = true; + m_gpr_is_valid = false; m_fpu_is_valid = false; } @@ -337,4 +348,73 @@ NativeRegisterContextLinux_loongarch64::GetExpeditedRegisters( return expedited_reg_nums; } +llvm::Error NativeRegisterContextLinux_loongarch64::ReadHardwareDebugInfo() { + if (!m_refresh_hwdebug_info) + return llvm::Error::success(); + + ::pid_t tid = m_thread.GetID(); + + int regset = NT_LOONGARCH_HW_WATCH; + struct iovec ioVec; + struct user_watch_state dreg_state; + Status error; + + ioVec.iov_base = &dreg_state; + ioVec.iov_len = sizeof(dreg_state); + error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, ®set, + &ioVec, ioVec.iov_len); + if (error.Fail()) + return error.ToError(); + + m_max_hwp_supported = dreg_state.dbg_info & 0x3f; + + regset = NT_LOONGARCH_HW_BREAK; + error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, ®set, + &ioVec, ioVec.iov_len); + if (error.Fail()) + return error.ToError(); + + m_max_hbp_supported = dreg_state.dbg_info & 0x3f; + + m_refresh_hwdebug_info = false; + + return llvm::Error::success(); +} + +llvm::Error NativeRegisterContextLinux_loongarch64::WriteHardwareDebugRegs( + DREGType hwbType) { + struct iovec ioVec; + struct user_watch_state dreg_state; + int regset; + + memset(&dreg_state, 0, sizeof(dreg_state)); + ioVec.iov_base = &dreg_state; + + switch (hwbType) { + case eDREGTypeWATCH: + regset = NT_LOONGARCH_HW_WATCH; + ioVec.iov_len = sizeof(dreg_state.dbg_info) + + (sizeof(dreg_state.dbg_regs[0]) * m_max_hwp_supported); + + for (uint32_t i = 0; i < m_max_hwp_supported; i++) { + dreg_state.dbg_regs[i].addr = m_hwp_regs[i].address; + dreg_state.dbg_regs[i].ctrl = m_hwp_regs[i].control; + } + break; + case eDREGTypeBREAK: + regset = NT_LOONGARCH_HW_BREAK; + ioVec.iov_len = sizeof(dreg_state.dbg_info) + + (sizeof(dreg_state.dbg_regs[0]) * m_max_hbp_supported); + + for (uint32_t i = 0; i < m_max_hbp_supported; i++) { + dreg_state.dbg_regs[i].addr = m_hbp_regs[i].address; + dreg_state.dbg_regs[i].ctrl = m_hbp_regs[i].control; + } + break; + } + + return NativeProcessLinux::PtraceWrapper(PTRACE_SETREGSET, m_thread.GetID(), + ®set, &ioVec, ioVec.iov_len) + .ToError(); +} #endif // defined(__loongarch__) && __loongarch_grlen == 64 diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.h b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.h index 0a6084ff4206..633b26fa970d 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.h +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_loongarch64.h @@ -12,6 +12,7 @@ #define lldb_NativeRegisterContextLinux_loongarch64_h #include "Plugins/Process/Linux/NativeRegisterContextLinux.h" +#include "Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.h" #include "Plugins/Process/Utility/RegisterInfoPOSIX_loongarch64.h" #include @@ -22,7 +23,8 @@ namespace process_linux { class NativeProcessLinux; class NativeRegisterContextLinux_loongarch64 - : public NativeRegisterContextLinux { + : public NativeRegisterContextLinux, + public NativeRegisterContextDBReg_loongarch { public: NativeRegisterContextLinux_loongarch64( const ArchSpec &target_arch, NativeThreadProtocol &native_thread, @@ -71,6 +73,7 @@ protected: private: bool m_gpr_is_valid; bool m_fpu_is_valid; + bool m_refresh_hwdebug_info; RegisterInfoPOSIX_loongarch64::GPR m_gpr; @@ -83,6 +86,10 @@ private: uint32_t CalculateFprOffset(const RegisterInfo *reg_info) const; const RegisterInfoPOSIX_loongarch64 &GetRegisterInfo() const; + + llvm::Error ReadHardwareDebugInfo() override; + + llvm::Error WriteHardwareDebugRegs(DREGType hwbType) override; }; } // namespace process_linux diff --git a/lldb/source/Plugins/Process/Utility/CMakeLists.txt b/lldb/source/Plugins/Process/Utility/CMakeLists.txt index 0526c9550317..0e1a5069d440 100644 --- a/lldb/source/Plugins/Process/Utility/CMakeLists.txt +++ b/lldb/source/Plugins/Process/Utility/CMakeLists.txt @@ -11,6 +11,7 @@ add_lldb_library(lldbPluginProcessUtility NativeProcessSoftwareSingleStep.cpp NativeRegisterContextDBReg.cpp NativeRegisterContextDBReg_arm64.cpp + NativeRegisterContextDBReg_loongarch.cpp NativeRegisterContextDBReg_x86.cpp NativeRegisterContextRegisterInfo.cpp NetBSDSignals.cpp diff --git a/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.cpp b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.cpp new file mode 100644 index 000000000000..b3b5e6b4d413 --- /dev/null +++ b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.cpp @@ -0,0 +1,65 @@ +//===-- NativeRegisterContextDBReg_loongarch.cpp --------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "NativeRegisterContextDBReg_loongarch.h" + +#include "lldb/Utility/LLDBLog.h" +#include "lldb/Utility/Log.h" +#include "lldb/Utility/RegisterValue.h" + +using namespace lldb_private; + +uint32_t +NativeRegisterContextDBReg_loongarch::GetWatchpointSize(uint32_t wp_index) { + Log *log = GetLog(LLDBLog::Watchpoints); + LLDB_LOG(log, "wp_index: {0}", wp_index); + + switch ((m_hwp_regs[wp_index].control >> 10) & 0x3) { + case 0x0: + return 8; + case 0x1: + return 4; + case 0x2: + return 2; + case 0x3: + return 1; + default: + return 0; + } +} + +std::optional +NativeRegisterContextDBReg_loongarch::AdjustWatchpoint( + const WatchpointDetails &details) { + // LoongArch only needs to check the size; it does not need to check the + // address. + size_t size = details.size; + if (size != 1 && size != 2 && size != 4 && size != 8) + return std::nullopt; + + return details; +} + +uint32_t +NativeRegisterContextDBReg_loongarch::MakeBreakControlValue(size_t size) { + // Return encoded hardware breakpoint control value. + return m_hw_dbg_enable_bit; +} + +uint32_t NativeRegisterContextDBReg_loongarch::MakeWatchControlValue( + size_t size, uint32_t watch_flags) { + // Encoding hardware watchpoint control value. + // Size encoded: + // case 1 : 0b11 + // case 2 : 0b10 + // case 4 : 0b01 + // case 8 : 0b00 + size_t encoded_size = (3 - llvm::Log2_32(size)) << 10; + + return m_hw_dbg_enable_bit | encoded_size | (watch_flags << 8); +} diff --git a/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.h b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.h new file mode 100644 index 000000000000..19c5e4cdea26 --- /dev/null +++ b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_loongarch.h @@ -0,0 +1,34 @@ +//===-- NativeRegisterContextDBReg_loongarch.h ------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef lldb_NativeRegisterContextDBReg_loongarch_h +#define lldb_NativeRegisterContextDBReg_loongarch_h + +#include "Plugins/Process/Utility/NativeRegisterContextDBReg.h" + +namespace lldb_private { + +class NativeRegisterContextDBReg_loongarch : public NativeRegisterContextDBReg { +public: + NativeRegisterContextDBReg_loongarch() + : NativeRegisterContextDBReg(/*enable_bit=*/0x10U) {} + +private: + uint32_t GetWatchpointSize(uint32_t wp_index) override; + + std::optional + AdjustWatchpoint(const WatchpointDetails &details) override; + + uint32_t MakeBreakControlValue(size_t size) override; + + uint32_t MakeWatchControlValue(size_t size, uint32_t watch_flags) override; +}; + +} // namespace lldb_private + +#endif // #ifndef lldb_NativeRegisterContextDBReg_loongarch_h diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp index 324db3db7eb4..c2fe05cad566 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp @@ -231,7 +231,8 @@ GDBRemoteCommunicationServerCommon::Handle_qHostInfo( host_arch.GetMachine() == llvm::Triple::aarch64_32 || host_arch.GetMachine() == llvm::Triple::aarch64_be || host_arch.GetMachine() == llvm::Triple::arm || - host_arch.GetMachine() == llvm::Triple::armeb || host_arch.IsMIPS()) + host_arch.GetMachine() == llvm::Triple::armeb || host_arch.IsMIPS() || + host_arch.GetTriple().isLoongArch()) response.Printf("watchpoint_exceptions_received:before;"); else response.Printf("watchpoint_exceptions_received:after;"); diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index db33525978a1..68485a40a3fc 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -2517,7 +2517,8 @@ bool Process::GetWatchpointReportedAfter() { llvm::Triple triple = arch.GetTriple(); if (triple.isMIPS() || triple.isPPC64() || triple.isRISCV() || - triple.isAArch64() || triple.isArmMClass() || triple.isARM()) + triple.isAArch64() || triple.isArmMClass() || triple.isARM() || + triple.isLoongArch()) reported_after = false; return reported_after; -- cgit v1.2.3 From 7077896a548a22d6a15c59d4b3edbc19d8e44fce Mon Sep 17 00:00:00 2001 From: Thurston Dang Date: Thu, 12 Dec 2024 18:31:01 -0800 Subject: [NFCI][sanitizer] Refactor parseSanitizeTrapArgs (#119797) parseSanitizeTrapArgs follows the general pattern of "compute the sanitizer mask based on the default plus opt-in (if supported) minus opt-out". This patch refactors the functionality into a generalized function, parseSanitizeArgs, which will be useful for future sanitizer flag parsing. --- clang/lib/Driver/SanitizerArgs.cpp | 46 +++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index e77857930996..355dea5fad80 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -247,39 +247,49 @@ static SanitizerMask setGroupBits(SanitizerMask Kinds) { return Kinds; } -static SanitizerMask parseSanitizeTrapArgs(const Driver &D, - const llvm::opt::ArgList &Args, - bool DiagnoseErrors) { - SanitizerMask TrapRemove; // During the loop below, the accumulated set of - // sanitizers disabled by the current sanitizer - // argument or any argument after it. - SanitizerMask TrappingKinds; - SanitizerMask TrappingSupportedWithGroups = setGroupBits(TrappingSupported); +// Computes the sanitizer mask based on the default plus opt-in (if supported) +// minus opt-out. +static SanitizerMask +parseSanitizeArgs(const Driver &D, const llvm::opt::ArgList &Args, + bool DiagnoseErrors, SanitizerMask Supported, + SanitizerMask Default, int OptInID, int OptOutID) { + SanitizerMask Remove; // During the loop below, the accumulated set of + // sanitizers disabled by the current sanitizer + // argument or any argument after it. + SanitizerMask Kinds; + SanitizerMask SupportedWithGroups = setGroupBits(Supported); for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) { - if (Arg->getOption().matches(options::OPT_fsanitize_trap_EQ)) { + if (Arg->getOption().matches(OptInID)) { Arg->claim(); SanitizerMask Add = parseArgValues(D, Arg, true); - Add &= ~TrapRemove; - SanitizerMask InvalidValues = Add & ~TrappingSupportedWithGroups; + Add &= ~Remove; + SanitizerMask InvalidValues = Add & ~SupportedWithGroups; if (InvalidValues && DiagnoseErrors) { SanitizerSet S; S.Mask = InvalidValues; D.Diag(diag::err_drv_unsupported_option_argument) << Arg->getSpelling() << toString(S); } - TrappingKinds |= expandSanitizerGroups(Add) & ~TrapRemove; - } else if (Arg->getOption().matches(options::OPT_fno_sanitize_trap_EQ)) { + Kinds |= expandSanitizerGroups(Add) & ~Remove; + } else if (Arg->getOption().matches(OptOutID)) { Arg->claim(); - TrapRemove |= - expandSanitizerGroups(parseArgValues(D, Arg, DiagnoseErrors)); + Remove |= expandSanitizerGroups(parseArgValues(D, Arg, DiagnoseErrors)); } } - // Apply default trapping behavior. - TrappingKinds |= TrappingDefault & ~TrapRemove; + // Apply default behavior. + Kinds |= Default & ~Remove; + + return Kinds; +} - return TrappingKinds; +static SanitizerMask parseSanitizeTrapArgs(const Driver &D, + const llvm::opt::ArgList &Args, + bool DiagnoseErrors) { + return parseSanitizeArgs(D, Args, DiagnoseErrors, TrappingSupported, + TrappingDefault, options::OPT_fsanitize_trap_EQ, + options::OPT_fno_sanitize_trap_EQ); } bool SanitizerArgs::needsFuzzerInterceptors() const { -- cgit v1.2.3 From 3b10e31d3a4a1c660c82287d3b9f6515f37a32ca Mon Sep 17 00:00:00 2001 From: hitmoon Date: Fri, 13 Dec 2024 10:34:53 +0800 Subject: [clang][LoongArch] Add FreeBSD targets (#119191) Add support for freebsd on loongarch Signed-off-by: xiaoqiang zhao Co-authored-by: yu shan wei --- clang/lib/Basic/Targets.cpp | 6 ++++++ clang/lib/Basic/Targets/OSTargets.h | 3 +++ clang/lib/Driver/ToolChains/FreeBSD.cpp | 14 ++++++++++++++ clang/test/Driver/freebsd.c | 15 +++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 0021d33c45d7..706a391023b3 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -726,6 +726,9 @@ std::unique_ptr AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::Linux: return std::make_unique>(Triple, Opts); + case llvm::Triple::FreeBSD: + return std::make_unique>(Triple, + Opts); default: return std::make_unique(Triple, Opts); } @@ -734,6 +737,9 @@ std::unique_ptr AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::Linux: return std::make_unique>(Triple, Opts); + case llvm::Triple::FreeBSD: + return std::make_unique>(Triple, + Opts); default: return std::make_unique(Triple, Opts); } diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index c0351f26e9be..cd9b3760ca58 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -231,6 +231,9 @@ public: case llvm::Triple::riscv32: case llvm::Triple::riscv64: break; + case llvm::Triple::loongarch32: + case llvm::Triple::loongarch64: + break; } } }; diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index c78f4e26a2f1..678efefb1afc 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -213,6 +213,14 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-m"); CmdArgs.push_back("elf64lriscv"); break; + case llvm::Triple::loongarch32: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf32loongarch"); + break; + case llvm::Triple::loongarch64: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf64loongarch"); + break; default: break; } @@ -223,6 +231,12 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("--no-relax"); } + if (Triple.isLoongArch64()) { + CmdArgs.push_back("-X"); + if (Args.hasArg(options::OPT_mno_relax)) + CmdArgs.push_back("--no-relax"); + } + if (Arg *A = Args.getLastArg(options::OPT_G)) { if (ToolChain.getTriple().isMIPS()) { StringRef v = A->getValue(); diff --git a/clang/test/Driver/freebsd.c b/clang/test/Driver/freebsd.c index 10fe155fee87..a0787bab4feb 100644 --- a/clang/test/Driver/freebsd.c +++ b/clang/test/Driver/freebsd.c @@ -77,6 +77,21 @@ // RUN: | FileCheck --check-prefix=CHECK-RV64I-LD %s // CHECK-RV64I-LD: ld{{.*}}" {{.*}} "-m" "elf64lriscv" // +// Check that LoongArch passes the correct linker emulation. +// +// RUN: %clang --target=loongarch32-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LA32-LD %s +// CHECK-LA32-LD: ld{{.*}}" {{.*}} "-m" "elf32loongarch" +// RUN: %clang --target=loongarch64-freebsd -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LA64-LD %s +// CHECK-LA64-LD: ld{{.*}}" {{.*}} "-m" "elf64loongarch" +// +// Check options passed to the linker on LoongArch +// +// RUN: %clang --target=loongarch64-freebsd -mno-relax -### %s %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LA64-LD-OPTS %s +// CHECK-LA64-LD-OPTS: ld{{.*}}" {{.*}} "-X" "--no-relax" +// // Check that the new linker flags are passed to FreeBSD // RUN: %clang --target=x86_64-pc-freebsd10.0 -m32 %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ -- cgit v1.2.3 From 5e53a8dadb0019ee87936c1278fa222781257005 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 13 Dec 2024 11:52:11 +0900 Subject: AMDGPU: Fix verifier assert with out of bounds subregister indexes (#119799) The manual check for aligned VGPR classes would assert if a virtual register used an index not supported by the register class. --- llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 11 +++--- ...unsupported-subreg-index-aligned-vgpr-check.mir | 41 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 llvm/test/MachineVerifier/AMDGPU/unsupported-subreg-index-aligned-vgpr-check.mir diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 4a94d6902979..057412d41e7a 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -4771,11 +4771,12 @@ bool SIInstrInfo::verifyInstruction(const MachineInstr &MI, if (ST.needsAlignedVGPRs()) { const TargetRegisterClass *RC = RI.getRegClassForReg(MRI, Reg); if (RI.hasVectorRegisters(RC) && MO.getSubReg()) { - const TargetRegisterClass *SubRC = - RI.getSubRegisterClass(RC, MO.getSubReg()); - RC = RI.getCompatibleSubRegClass(RC, SubRC, MO.getSubReg()); - if (RC) - RC = SubRC; + if (const TargetRegisterClass *SubRC = + RI.getSubRegisterClass(RC, MO.getSubReg())) { + RC = RI.getCompatibleSubRegClass(RC, SubRC, MO.getSubReg()); + if (RC) + RC = SubRC; + } } // Check that this is the aligned version of the class. diff --git a/llvm/test/MachineVerifier/AMDGPU/unsupported-subreg-index-aligned-vgpr-check.mir b/llvm/test/MachineVerifier/AMDGPU/unsupported-subreg-index-aligned-vgpr-check.mir new file mode 100644 index 000000000000..651a9d71ae32 --- /dev/null +++ b/llvm/test/MachineVerifier/AMDGPU/unsupported-subreg-index-aligned-vgpr-check.mir @@ -0,0 +1,41 @@ +# RUN: not --crash llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 -run-pass=none -filetype=null %s 2>&1 | FileCheck %s + +# sub16_sub17_sub18_sub19 is outside the bounds of a 512-bit +# register. Make sure the verification doesn't assert. This was only +# broken for targets that require even aligned VGPRs due to the manual +# alignment check. + +--- +name: uses_invalid_subregister_for_regclass +tracksRegLiveness: true +body: | + bb.0: + %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec + S_NOP 0, implicit-def %1:vreg_512_align2 + + + ; CHECK: *** Bad machine code: Invalid subregister index for virtual register *** + ; CHECK-NEXT: - function: uses_invalid_subregister_for_regclass + ; CHECK-NEXT: - basic block: %bb.0 + ; CHECK-NEXT: - instruction: GLOBAL_STORE_DWORDX4_SADDR %0:vgpr_32, %1.sub16_sub17_sub18_sub19:vreg_512_align2, undef $sgpr8_sgpr9, 80, 0, implicit $exec :: (store (s128), addrspace 1) + ; CHECK-NEXT: - operand 1: %1.sub16_sub17_sub18_sub19:vreg_512_align2 + ; CHECK-NEXT: Register class VReg_512_Align2 does not support subreg index 166 + + ; CHECK: *** Bad machine code: Subtarget requires even aligned vector registers *** + ; CHECK-NEXT: - function: uses_invalid_subregister_for_regclass + ; CHECK-NEXT: - basic block: %bb.0 + ; CHECK-NEXT: - instruction: GLOBAL_STORE_DWORDX4_SADDR %0:vgpr_32, %2.sub16_sub17_sub18_sub19:vreg_512, undef $sgpr8_sgpr9, 80, 0, implicit $exec :: (store (s128), addrspace 1) + GLOBAL_STORE_DWORDX4_SADDR %0, %1.sub16_sub17_sub18_sub19, undef $sgpr8_sgpr9, 80, 0, implicit $exec :: (store (s128), addrspace 1) + + ; Test with unaligned class + ; CHECK: *** Bad machine code: Invalid subregister index for virtual register *** + ; CHECK-NEXT: - function: uses_invalid_subregister_for_regclass + ; CHECK-NEXT: - basic block: %bb.0 + ; CHECK-NEXT: - instruction: GLOBAL_STORE_DWORDX4_SADDR %0:vgpr_32, %2.sub16_sub17_sub18_sub19:vreg_512, undef $sgpr8_sgpr9, 80, 0, implicit $exec :: (store (s128), addrspace 1) + ; CHECK-NEXT: - operand 1: %2.sub16_sub17_sub18_sub19:vreg_512 + ; CHECK-NEXT: Register class VReg_512 does not support subreg index 166 + S_NOP 0, implicit-def %2:vreg_512 + GLOBAL_STORE_DWORDX4_SADDR %0, %2.sub16_sub17_sub18_sub19, undef $sgpr8_sgpr9, 80, 0, implicit $exec :: (store (s128), addrspace 1) + S_ENDPGM 0 + +... -- cgit v1.2.3 From ada517b40c6f90a78ea69b9d2d0997c82065c9fd Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Fri, 13 Dec 2024 03:40:15 +0000 Subject: [MLGO][NFC] Clang format MLRegAllocEvictAdvisor.cpp Run clang-format to fix an issue in spacing in a comment. --- llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp b/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp index 03f015f8c9e3..67ce0a69d849 100644 --- a/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp +++ b/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp @@ -554,7 +554,7 @@ private: std::unique_ptr Log; }; -#endif //#ifdef LLVM_HAVE_TFLITE +#endif // #ifdef LLVM_HAVE_TFLITE } // namespace float MLEvictAdvisor::getInitialQueueSize(const MachineFunction &MF) { -- cgit v1.2.3 From 1562b70eaf6e0b95910fa684dfc53bd5ca6252e7 Mon Sep 17 00:00:00 2001 From: paperchalice Date: Fri, 13 Dec 2024 11:43:09 +0800 Subject: Reapply "[DomTreeUpdater] Move critical edge splitting code to updater" (#119547) This relands commit #115111. Use traditional way to update post dominator tree, i.e. break critical edge splitting into insert, insert, delete sequence. When splitting critical edges, the post dominator tree may change its root node, and `setNewRoot` only works in normal dominator tree... See https://github.com/llvm/llvm-project/blob/6c7e5827eda26990e872eb7c3f0d7866ee3c3171/llvm/include/llvm/Support/GenericDomTree.h#L684-L687 --- llvm/include/llvm/Analysis/DomTreeUpdater.h | 13 +- llvm/include/llvm/Analysis/GenericDomTreeUpdater.h | 43 +++- .../llvm/Analysis/GenericDomTreeUpdaterImpl.h | 227 +++++++++++++++------ llvm/include/llvm/CodeGen/MachineBasicBlock.h | 24 ++- llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h | 7 + llvm/include/llvm/CodeGen/MachineDominators.h | 169 +-------------- llvm/include/llvm/CodeGen/MachineSSAContext.h | 6 - llvm/lib/Analysis/DomTreeUpdater.cpp | 7 + llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 4 +- llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp | 4 +- .../CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp | 2 +- .../CodeGen/LiveDebugValues/LiveDebugValues.cpp | 2 +- llvm/lib/CodeGen/MachineBasicBlock.cpp | 8 +- llvm/lib/CodeGen/MachineDomTreeUpdater.cpp | 7 + llvm/lib/CodeGen/MachineDominanceFrontier.cpp | 3 +- llvm/lib/CodeGen/MachineDominators.cpp | 74 ------- llvm/lib/CodeGen/MachineLICM.cpp | 17 +- llvm/lib/CodeGen/MachineLoopInfo.cpp | 2 +- llvm/lib/CodeGen/MachineSink.cpp | 6 +- llvm/lib/CodeGen/MachineUniformityAnalysis.cpp | 3 +- llvm/lib/CodeGen/PHIElimination.cpp | 27 ++- llvm/lib/CodeGen/XRayInstrumentation.cpp | 4 +- llvm/lib/Target/AMDGPU/SILateBranchLowering.cpp | 6 +- llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp | 2 +- llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp | 2 +- llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp | 2 +- llvm/lib/Target/X86/X86FlagsCopyLowering.cpp | 3 +- .../llvm-reduce/deltas/ReduceInstructionsMIR.cpp | 2 +- llvm/unittests/Analysis/DomTreeUpdaterTest.cpp | 43 ++++ .../WebAssembly/WebAssemblyExceptionInfoTest.cpp | 8 +- 30 files changed, 359 insertions(+), 368 deletions(-) diff --git a/llvm/include/llvm/Analysis/DomTreeUpdater.h b/llvm/include/llvm/Analysis/DomTreeUpdater.h index c120a6cc6ce5..0386262ba2b6 100644 --- a/llvm/include/llvm/Analysis/DomTreeUpdater.h +++ b/llvm/include/llvm/Analysis/DomTreeUpdater.h @@ -81,6 +81,9 @@ public: ///@} + /// Debug method to help view the internal state of this class. + LLVM_DUMP_METHOD void dump() const; + private: class CallBackOnDeletion final : public CallbackVH { public: @@ -109,9 +112,6 @@ private: /// Returns true if at least one BasicBlock is deleted. bool forceFlushDeletedBB(); - - /// Debug method to help view the internal state of this class. - LLVM_DUMP_METHOD void dump() const; }; extern template class GenericDomTreeUpdater::recalculate(Function &F); + +extern template void +GenericDomTreeUpdater:: + applyUpdatesImpl(); +extern template void +GenericDomTreeUpdater:: + applyUpdatesImpl(); } // namespace llvm #endif // LLVM_ANALYSIS_DOMTREEUPDATER_H diff --git a/llvm/include/llvm/Analysis/GenericDomTreeUpdater.h b/llvm/include/llvm/Analysis/GenericDomTreeUpdater.h index ca4ce68b85cb..4a03f548823e 100644 --- a/llvm/include/llvm/Analysis/GenericDomTreeUpdater.h +++ b/llvm/include/llvm/Analysis/GenericDomTreeUpdater.h @@ -30,6 +30,7 @@ class GenericDomTreeUpdater { public: enum class UpdateStrategy : unsigned char { Eager = 0, Lazy = 1 }; using BasicBlockT = typename DomTreeT::NodeType; + using UpdateT = typename DomTreeT::UpdateType; explicit GenericDomTreeUpdater(UpdateStrategy Strategy_) : Strategy(Strategy_) {} @@ -146,7 +147,12 @@ public: /// 2. It is illegal to submit any update that has already been submitted, /// i.e., you are supposed not to insert an existent edge or delete a /// nonexistent edge. - void applyUpdates(ArrayRef Updates); + void applyUpdates(ArrayRef Updates); + + /// Apply updates that the critical edge (FromBB, ToBB) has been + /// split with NewBB. + void splitCriticalEdge(BasicBlockT *FromBB, BasicBlockT *ToBB, + BasicBlockT *NewBB); /// Submit updates to all available trees. It will also /// 1. discard duplicated updates, @@ -169,7 +175,7 @@ public: /// 3. It is only legal to submit updates to an edge in the order CFG changes /// are made. The order you submit updates on different edges is not /// restricted. - void applyUpdatesPermissive(ArrayRef Updates); + void applyUpdatesPermissive(ArrayRef Updates); ///@} @@ -205,7 +211,25 @@ public: LLVM_DUMP_METHOD void dump() const; protected: - SmallVector PendUpdates; + /// Helper structure used to hold all the basic blocks + /// involved in the split of a critical edge. + struct CriticalEdge { + BasicBlockT *FromBB; + BasicBlockT *ToBB; + BasicBlockT *NewBB; + }; + + struct DomTreeUpdate { + bool IsCriticalEdgeSplit = false; + union { + UpdateT Update; + CriticalEdge EdgeSplit; + }; + DomTreeUpdate(UpdateT Update) : Update(Update) {} + DomTreeUpdate(CriticalEdge E) : IsCriticalEdgeSplit(true), EdgeSplit(E) {} + }; + + SmallVector PendUpdates; size_t PendDTUpdateIndex = 0; size_t PendPDTUpdateIndex = 0; DomTreeT *DT = nullptr; @@ -216,21 +240,21 @@ protected: bool IsRecalculatingPostDomTree = false; /// Returns true if the update is self dominance. - bool isSelfDominance(typename DomTreeT::UpdateType Update) const { + bool isSelfDominance(UpdateT Update) const { // Won't affect DomTree and PostDomTree. return Update.getFrom() == Update.getTo(); } /// Helper function to apply all pending DomTree updates. - void applyDomTreeUpdates(); + void applyDomTreeUpdates() { applyUpdatesImpl(); } /// Helper function to apply all pending PostDomTree updates. - void applyPostDomTreeUpdates(); + void applyPostDomTreeUpdates() { applyUpdatesImpl(); } /// Returns true if the update appears in the LLVM IR. /// It is used to check whether an update is valid in /// insertEdge/deleteEdge or is unnecessary in the batch update. - bool isUpdateValid(typename DomTreeT::UpdateType Update) const; + bool isUpdateValid(UpdateT Update) const; /// Erase Basic Block node before it is unlinked from Function /// in the DomTree and PostDomTree. @@ -243,6 +267,11 @@ protected: /// Drop all updates applied by all available trees and delete BasicBlocks if /// all available trees are up-to-date. void dropOutOfDateUpdates(); + +private: + void splitDTCriticalEdges(ArrayRef Updates); + void splitPDTCriticalEdges(ArrayRef Updates); + template void applyUpdatesImpl(); }; } // namespace llvm diff --git a/llvm/include/llvm/Analysis/GenericDomTreeUpdaterImpl.h b/llvm/include/llvm/Analysis/GenericDomTreeUpdaterImpl.h index b79eaef57710..896b68c5021b 100644 --- a/llvm/include/llvm/Analysis/GenericDomTreeUpdaterImpl.h +++ b/llvm/include/llvm/Analysis/GenericDomTreeUpdaterImpl.h @@ -16,6 +16,7 @@ #ifndef LLVM_ANALYSIS_GENERICDOMTREEUPDATERIMPL_H #define LLVM_ANALYSIS_GENERICDOMTREEUPDATERIMPL_H +#include "llvm/ADT/SmallBitVector.h" #include "llvm/Analysis/GenericDomTreeUpdater.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" @@ -56,7 +57,7 @@ void GenericDomTreeUpdater::recalculate( template void GenericDomTreeUpdater::applyUpdates( - ArrayRef Updates) { + ArrayRef Updates) { if (!DT && !PDT) return; @@ -77,12 +78,12 @@ void GenericDomTreeUpdater::applyUpdates( template void GenericDomTreeUpdater:: - applyUpdatesPermissive(ArrayRef Updates) { + applyUpdatesPermissive(ArrayRef Updates) { if (!DT && !PDT) return; SmallSet, 8> Seen; - SmallVector DeduplicatedUpdates; + SmallVector DeduplicatedUpdates; for (const auto &U : Updates) { auto Edge = std::make_pair(U.getFrom(), U.getTo()); // Because it is illegal to submit updates that have already been applied @@ -129,6 +130,24 @@ void GenericDomTreeUpdater:: PDT->applyUpdates(DeduplicatedUpdates); } +template +void GenericDomTreeUpdater::splitCriticalEdge( + BasicBlockT *FromBB, BasicBlockT *ToBB, BasicBlockT *NewBB) { + if (!DT && !PDT) + return; + + CriticalEdge E = {FromBB, ToBB, NewBB}; + if (Strategy == UpdateStrategy::Lazy) { + PendUpdates.push_back(E); + return; + } + + if (DT) + splitDTCriticalEdges(E); + if (PDT) + splitPDTCriticalEdges(E); +} + template DomTreeT & GenericDomTreeUpdater::getDomTree() { @@ -171,39 +190,40 @@ GenericDomTreeUpdater::dump() const { OS << "Lazy\n"; int Index = 0; + auto printBlockInfo = [&](BasicBlockT *BB, StringRef Ending) { + if (BB) { + auto S = BB->getName(); + if (!BB->hasName()) + S = "(no name)"; + OS << S << "(" << BB << ")" << Ending; + } else { + OS << "(badref)" << Ending; + } + }; + auto printUpdates = - [&](typename ArrayRef::const_iterator - begin, - typename ArrayRef::const_iterator - end) { + [&](typename ArrayRef::const_iterator begin, + typename ArrayRef::const_iterator end) { if (begin == end) OS << " None\n"; Index = 0; for (auto It = begin, ItEnd = end; It != ItEnd; ++It) { - auto U = *It; - OS << " " << Index << " : "; - ++Index; - if (U.getKind() == DomTreeT::Insert) - OS << "Insert, "; - else - OS << "Delete, "; - BasicBlockT *From = U.getFrom(); - if (From) { - auto S = From->getName(); - if (!From->hasName()) - S = "(no name)"; - OS << S << "(" << From << "), "; - } else { - OS << "(badref), "; - } - BasicBlockT *To = U.getTo(); - if (To) { - auto S = To->getName(); - if (!To->hasName()) - S = "(no_name)"; - OS << S << "(" << To << ")\n"; + if (!It->IsCriticalEdgeSplit) { + auto U = It->Update; + OS << " " << Index << " : "; + ++Index; + if (U.getKind() == DomTreeT::Insert) + OS << "Insert, "; + else + OS << "Delete, "; + printBlockInfo(U.getFrom(), ", "); + printBlockInfo(U.getTo(), "\n"); } else { - OS << "(badref)\n"; + const auto &Edge = It->EdgeSplit; + OS << " " << Index++ << " : Split critical edge, "; + printBlockInfo(Edge.FromBB, ", "); + printBlockInfo(Edge.ToBB, ", "); + printBlockInfo(Edge.NewBB, "\n"); } } }; @@ -236,50 +256,53 @@ GenericDomTreeUpdater::dump() const { if (BB->hasName()) OS << BB->getName() << "("; else - OS << "(no_name)("; + OS << "(no name)("; OS << BB << ")\n"; } #endif } template +template void GenericDomTreeUpdater::applyDomTreeUpdates() { + PostDomTreeT>::applyUpdatesImpl() { + auto *DomTree = [&]() { + if constexpr (IsForward) + return DT; + else + return PDT; + }(); // No pending DomTreeUpdates. - if (Strategy != UpdateStrategy::Lazy || !DT) + if (Strategy != UpdateStrategy::Lazy || !DomTree) return; + size_t &PendUpdateIndex = IsForward ? PendDTUpdateIndex : PendPDTUpdateIndex; - // Only apply updates not are applied by DomTree. - if (hasPendingDomTreeUpdates()) { - const auto I = PendUpdates.begin() + PendDTUpdateIndex; + // Only apply updates not are applied by (Post)DomTree. + while (IsForward ? hasPendingDomTreeUpdates() + : hasPendingPostDomTreeUpdates()) { + auto I = PendUpdates.begin() + PendUpdateIndex; const auto E = PendUpdates.end(); assert(I < E && "Iterator range invalid; there should be DomTree updates."); - DT->applyUpdates(ArrayRef(I, E)); - PendDTUpdateIndex = PendUpdates.size(); - } -} - -template -void GenericDomTreeUpdater::applyPostDomTreeUpdates() { - // No pending PostDomTreeUpdates. - if (Strategy != UpdateStrategy::Lazy || !PDT) - return; - - // Only apply updates not are applied by PostDomTree. - if (hasPendingPostDomTreeUpdates()) { - const auto I = PendUpdates.begin() + PendPDTUpdateIndex; - const auto E = PendUpdates.end(); - assert(I < E && - "Iterator range invalid; there should be PostDomTree updates."); - PDT->applyUpdates(ArrayRef(I, E)); - PendPDTUpdateIndex = PendUpdates.size(); + if (!I->IsCriticalEdgeSplit) { + SmallVector NormalUpdates; + for (; I != E && !I->IsCriticalEdgeSplit; ++I) + NormalUpdates.push_back(I->Update); + DomTree->applyUpdates(NormalUpdates); + PendUpdateIndex += NormalUpdates.size(); + } else { + SmallVector CriticalEdges; + for (; I != E && I->IsCriticalEdgeSplit; ++I) + CriticalEdges.push_back(I->EdgeSplit); + IsForward ? splitDTCriticalEdges(CriticalEdges) + : splitPDTCriticalEdges(CriticalEdges); + PendUpdateIndex += CriticalEdges.size(); + } } } template bool GenericDomTreeUpdater::isUpdateValid( - typename DomTreeT::UpdateType Update) const { + UpdateT Update) const { const auto *From = Update.getFrom(); const auto *To = Update.getTo(); const auto Kind = Update.getKind(); @@ -347,6 +370,96 @@ void GenericDomTreeUpdater +void GenericDomTreeUpdater:: + splitDTCriticalEdges(ArrayRef Edges) { + // Bail out early if there is nothing to do. + if (!DT || Edges.empty()) + return; + + // Remember all the basic blocks that are inserted during + // edge splitting. + // Invariant: NewBBs == all the basic blocks contained in the NewBB + // field of all the elements of Edges. + // I.e., forall elt in Edges, it exists BB in NewBBs + // such as BB == elt.NewBB. + SmallSet NewBBs; + for (auto &Edge : Edges) + NewBBs.insert(Edge.NewBB); + // For each element in Edges, remember whether or not element + // is the new immediate domminator of its successor. The mapping is done by + // index, i.e., the information for the ith element of Edges is + // the ith element of IsNewIDom. + SmallBitVector IsNewIDom(Edges.size(), true); + + // Collect all the dominance properties info, before invalidating + // the underlying DT. + for (const auto &[Idx, Edge] : enumerate(Edges)) { + // Update dominator information. + BasicBlockT *Succ = Edge.ToBB; + auto *SuccDTNode = DT->getNode(Succ); + + for (BasicBlockT *PredBB : predecessors(Succ)) { + if (PredBB == Edge.NewBB) + continue; + // If we are in this situation: + // FromBB1 FromBB2 + // + + + // + + + + + // + + + + + // ... Split1 Split2 ... + // + + + // + + + // + + // Succ + // Instead of checking the domiance property with Split2, we check it + // with FromBB2 since Split2 is still unknown of the underlying DT + // structure. + if (NewBBs.contains(PredBB)) { + assert(pred_size(PredBB) == 1 && "A basic block resulting from a " + "critical edge split has more " + "than one predecessor!"); + PredBB = *pred_begin(PredBB); + } + if (!DT->dominates(SuccDTNode, DT->getNode(PredBB))) { + IsNewIDom[Idx] = false; + break; + } + } + } + + // Now, update DT with the collected dominance properties info. + for (const auto &[Idx, Edge] : enumerate(Edges)) { + // We know FromBB dominates NewBB. + auto *NewDTNode = DT->addNewBlock(Edge.NewBB, Edge.FromBB); + + // If all the other predecessors of "Succ" are dominated by "Succ" itself + // then the new block is the new immediate dominator of "Succ". Otherwise, + // the new block doesn't dominate anything. + if (IsNewIDom[Idx]) + DT->changeImmediateDominator(DT->getNode(Edge.ToBB), NewDTNode); + } +} + +// Post dominator tree is different, the new basic block in critical edge +// may become the new root. +template +void GenericDomTreeUpdater:: + splitPDTCriticalEdges(ArrayRef Edges) { + // Bail out early if there is nothing to do. + if (!PDT || Edges.empty()) + return; + + std::vector Updates; + for (const auto &Edge : Edges) { + Updates.push_back({PostDomTreeT::Insert, Edge.FromBB, Edge.NewBB}); + Updates.push_back({PostDomTreeT::Insert, Edge.NewBB, Edge.ToBB}); + if (!llvm::is_contained(successors(Edge.FromBB), Edge.ToBB)) + Updates.push_back({PostDomTreeT::Delete, Edge.FromBB, Edge.ToBB}); + } + PDT->applyUpdates(Updates); +} + } // namespace llvm #endif // LLVM_ANALYSIS_GENERICDOMTREEUPDATERIMPL_H diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h index 6cf151c951b1..7fe33c3913f2 100644 --- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h +++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h @@ -32,6 +32,7 @@ namespace llvm { class BasicBlock; +class MachineDomTreeUpdater; class MachineFunction; class MCSymbol; class ModuleSlotTracker; @@ -972,22 +973,23 @@ public: /// MachineLoopInfo, as applicable. MachineBasicBlock * SplitCriticalEdge(MachineBasicBlock *Succ, Pass &P, - std::vector> *LiveInSets = nullptr) { - return SplitCriticalEdge(Succ, &P, nullptr, LiveInSets); + std::vector> *LiveInSets = nullptr, + MachineDomTreeUpdater *MDTU = nullptr) { + return SplitCriticalEdge(Succ, &P, nullptr, LiveInSets, MDTU); } MachineBasicBlock * SplitCriticalEdge(MachineBasicBlock *Succ, MachineFunctionAnalysisManager &MFAM, - std::vector> *LiveInSets = nullptr) { - return SplitCriticalEdge(Succ, nullptr, &MFAM, LiveInSets); + std::vector> *LiveInSets = nullptr, + MachineDomTreeUpdater *MDTU = nullptr) { + return SplitCriticalEdge(Succ, nullptr, &MFAM, LiveInSets, MDTU); } // Helper method for new pass manager migration. - MachineBasicBlock * - SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P, - MachineFunctionAnalysisManager *MFAM, - std::vector> *LiveInSets); + MachineBasicBlock *SplitCriticalEdge( + MachineBasicBlock *Succ, Pass *P, MachineFunctionAnalysisManager *MFAM, + std::vector> *LiveInSets, MachineDomTreeUpdater *MDTU); /// Check if the edge between this block and the given successor \p /// Succ, can be split. If this returns true a subsequent call to @@ -1375,6 +1377,12 @@ inline auto successors(const MachineBasicBlock *BB) { return BB->successors(); } inline auto predecessors(const MachineBasicBlock *BB) { return BB->predecessors(); } +inline auto succ_size(const MachineBasicBlock *BB) { return BB->succ_size(); } +inline auto pred_size(const MachineBasicBlock *BB) { return BB->pred_size(); } +inline auto succ_begin(const MachineBasicBlock *BB) { return BB->succ_begin(); } +inline auto pred_begin(const MachineBasicBlock *BB) { return BB->pred_begin(); } +inline auto succ_end(const MachineBasicBlock *BB) { return BB->succ_end(); } +inline auto pred_end(const MachineBasicBlock *BB) { return BB->pred_end(); } /// MachineInstrSpan provides an interface to get an iteration range /// containing the instruction it was initialized with, along with all diff --git a/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h b/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h index 9e3971f0b9fc..fcdc0becf31c 100644 --- a/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h +++ b/llvm/include/llvm/CodeGen/MachineDomTreeUpdater.h @@ -69,5 +69,12 @@ extern template void GenericDomTreeUpdater::recalculate(MachineFunction &MF); + +extern template void GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, + MachinePostDominatorTree>::applyUpdatesImpl(); +extern template void GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, + MachinePostDominatorTree>::applyUpdatesImpl(); } // namespace llvm #endif // LLVM_CODEGEN_MACHINEDOMTREEUPDATER_H diff --git a/llvm/include/llvm/CodeGen/MachineDominators.h b/llvm/include/llvm/CodeGen/MachineDominators.h index 74cf94398736..61635ff64502 100644 --- a/llvm/include/llvm/CodeGen/MachineDominators.h +++ b/llvm/include/llvm/CodeGen/MachineDominators.h @@ -73,86 +73,22 @@ extern template bool Verify(const MBBDomTree &DT, /// compute a normal dominator tree. /// class MachineDominatorTree : public DomTreeBase { - /// Helper structure used to hold all the basic blocks - /// involved in the split of a critical edge. - struct CriticalEdge { - MachineBasicBlock *FromBB; - MachineBasicBlock *ToBB; - MachineBasicBlock *NewBB; - }; - - /// Pile up all the critical edges to be split. - /// The splitting of a critical edge is local and thus, it is possible - /// to apply several of those changes at the same time. - mutable SmallVector CriticalEdgesToSplit; - - /// Remember all the basic blocks that are inserted during - /// edge splitting. - /// Invariant: NewBBs == all the basic blocks contained in the NewBB - /// field of all the elements of CriticalEdgesToSplit. - /// I.e., forall elt in CriticalEdgesToSplit, it exists BB in NewBBs - /// such as BB == elt.NewBB. - mutable SmallSet NewBBs; - - /// Apply all the recorded critical edges to the DT. - /// This updates the underlying DT information in a way that uses - /// the fast query path of DT as much as possible. - /// FIXME: This method should not be a const member! - /// - /// \post CriticalEdgesToSplit.empty(). - void applySplitCriticalEdges() const; public: using Base = DomTreeBase; MachineDominatorTree() = default; - explicit MachineDominatorTree(MachineFunction &MF) { calculate(MF); } + explicit MachineDominatorTree(MachineFunction &MF) { recalculate(MF); } /// Handle invalidation explicitly. bool invalidate(MachineFunction &, const PreservedAnalyses &PA, MachineFunctionAnalysisManager::Invalidator &); - // FIXME: If there is an updater for MachineDominatorTree, - // migrate to this updater and remove these wrappers. - - MachineDominatorTree &getBase() { - applySplitCriticalEdges(); - return *this; - } - - MachineBasicBlock *getRoot() const { - applySplitCriticalEdges(); - return Base::getRoot(); - } - - MachineDomTreeNode *getRootNode() const { - applySplitCriticalEdges(); - return const_cast(Base::getRootNode()); - } - - void calculate(MachineFunction &F); - - bool dominates(const MachineDomTreeNode *A, - const MachineDomTreeNode *B) const { - applySplitCriticalEdges(); - return Base::dominates(A, B); - } - - void getDescendants(MachineBasicBlock *A, - SmallVectorImpl &Result) { - applySplitCriticalEdges(); - Base::getDescendants(A, Result); - } - - bool dominates(const MachineBasicBlock *A, const MachineBasicBlock *B) const { - applySplitCriticalEdges(); - return Base::dominates(A, B); - } + using Base::dominates; // dominates - Return true if A dominates B. This performs the // special checks necessary if A and B are in the same basic block. bool dominates(const MachineInstr *A, const MachineInstr *B) const { - applySplitCriticalEdges(); const MachineBasicBlock *BBA = A->getParent(), *BBB = B->getParent(); if (BBA != BBB) return Base::dominates(BBA, BBB); @@ -164,107 +100,6 @@ public: return &*I == A; } - - bool properlyDominates(const MachineDomTreeNode *A, - const MachineDomTreeNode *B) const { - applySplitCriticalEdges(); - return Base::properlyDominates(A, B); - } - - bool properlyDominates(const MachineBasicBlock *A, - const MachineBasicBlock *B) const { - applySplitCriticalEdges(); - return Base::properlyDominates(A, B); - } - - /// findNearestCommonDominator - Find nearest common dominator basic block - /// for basic block A and B. If there is no such block then return NULL. - MachineBasicBlock *findNearestCommonDominator(MachineBasicBlock *A, - MachineBasicBlock *B) { - applySplitCriticalEdges(); - return Base::findNearestCommonDominator(A, B); - } - - MachineDomTreeNode *operator[](MachineBasicBlock *BB) const { - applySplitCriticalEdges(); - return Base::getNode(BB); - } - - /// getNode - return the (Post)DominatorTree node for the specified basic - /// block. This is the same as using operator[] on this class. - /// - MachineDomTreeNode *getNode(MachineBasicBlock *BB) const { - applySplitCriticalEdges(); - return Base::getNode(BB); - } - - /// addNewBlock - Add a new node to the dominator tree information. This - /// creates a new node as a child of DomBB dominator node,linking it into - /// the children list of the immediate dominator. - MachineDomTreeNode *addNewBlock(MachineBasicBlock *BB, - MachineBasicBlock *DomBB) { - applySplitCriticalEdges(); - return Base::addNewBlock(BB, DomBB); - } - - /// changeImmediateDominator - This method is used to update the dominator - /// tree information when a node's immediate dominator changes. - /// - void changeImmediateDominator(MachineBasicBlock *N, - MachineBasicBlock *NewIDom) { - applySplitCriticalEdges(); - Base::changeImmediateDominator(N, NewIDom); - } - - void changeImmediateDominator(MachineDomTreeNode *N, - MachineDomTreeNode *NewIDom) { - applySplitCriticalEdges(); - Base::changeImmediateDominator(N, NewIDom); - } - - /// eraseNode - Removes a node from the dominator tree. Block must not - /// dominate any other blocks. Removes node from its immediate dominator's - /// children list. Deletes dominator node associated with basic block BB. - void eraseNode(MachineBasicBlock *BB) { - applySplitCriticalEdges(); - Base::eraseNode(BB); - } - - /// splitBlock - BB is split and now it has one successor. Update dominator - /// tree to reflect this change. - void splitBlock(MachineBasicBlock* NewBB) { - applySplitCriticalEdges(); - Base::splitBlock(NewBB); - } - - /// isReachableFromEntry - Return true if A is dominated by the entry - /// block of the function containing it. - bool isReachableFromEntry(const MachineBasicBlock *A) { - applySplitCriticalEdges(); - return Base::isReachableFromEntry(A); - } - - /// Record that the critical edge (FromBB, ToBB) has been - /// split with NewBB. - /// This is best to use this method instead of directly update the - /// underlying information, because this helps mitigating the - /// number of time the DT information is invalidated. - /// - /// \note Do not use this method with regular edges. - /// - /// \note To benefit from the compile time improvement incurred by this - /// method, the users of this method have to limit the queries to the DT - /// interface between two edges splitting. In other words, they have to - /// pack the splitting of critical edges as much as possible. - void recordSplitCriticalEdge(MachineBasicBlock *FromBB, - MachineBasicBlock *ToBB, - MachineBasicBlock *NewBB) { - bool Inserted = NewBBs.insert(NewBB).second; - (void)Inserted; - assert(Inserted && - "A basic block inserted via edge splitting cannot appear twice"); - CriticalEdgesToSplit.push_back({FromBB, ToBB, NewBB}); - } }; /// \brief Analysis pass which computes a \c MachineDominatorTree. diff --git a/llvm/include/llvm/CodeGen/MachineSSAContext.h b/llvm/include/llvm/CodeGen/MachineSSAContext.h index b70450c19f28..0e4304f69380 100644 --- a/llvm/include/llvm/CodeGen/MachineSSAContext.h +++ b/llvm/include/llvm/CodeGen/MachineSSAContext.h @@ -24,12 +24,6 @@ class MachineInstr; class MachineFunction; class Register; -inline unsigned succ_size(const MachineBasicBlock *BB) { - return BB->succ_size(); -} -inline unsigned pred_size(const MachineBasicBlock *BB) { - return BB->pred_size(); -} inline auto instrs(const MachineBasicBlock &BB) { return BB.instrs(); } template <> struct GenericSSATraits { diff --git a/llvm/lib/Analysis/DomTreeUpdater.cpp b/llvm/lib/Analysis/DomTreeUpdater.cpp index 8731c3faf21e..588944428616 100644 --- a/llvm/lib/Analysis/DomTreeUpdater.cpp +++ b/llvm/lib/Analysis/DomTreeUpdater.cpp @@ -28,6 +28,13 @@ template void GenericDomTreeUpdater::recalculate(Function &F); +template void +GenericDomTreeUpdater:: + applyUpdatesImpl(); +template void +GenericDomTreeUpdater:: + applyUpdatesImpl(); + bool DomTreeUpdater::forceFlushDeletedBB() { if (DeletedBBs.empty()) return false; diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 3072edc5088e..575ef10d9bbd 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1791,7 +1791,7 @@ void AsmPrinter::emitFunctionBody() { MDT = MDTWrapper ? &MDTWrapper->getDomTree() : nullptr; if (!MDT) { OwnedMDT = std::make_unique(); - OwnedMDT->getBase().recalculate(*MF); + OwnedMDT->recalculate(*MF); MDT = OwnedMDT.get(); } @@ -1800,7 +1800,7 @@ void AsmPrinter::emitFunctionBody() { MLI = MLIWrapper ? &MLIWrapper->getLI() : nullptr; if (!MLI) { OwnedMLI = std::make_unique(); - OwnedMLI->analyze(MDT->getBase()); + OwnedMLI->analyze(*MDT); MLI = OwnedMLI.get(); } } diff --git a/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp b/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp index 2561f2e5c9bb..6fd84646009b 100644 --- a/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp +++ b/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp @@ -74,13 +74,13 @@ LazyMachineBlockFrequencyInfoPass::calculateIfNotAvailable() const { if (!MDT) { LLVM_DEBUG(dbgs() << "Building DominatorTree on the fly\n"); OwnedMDT = std::make_unique(); - OwnedMDT->getBase().recalculate(*MF); + OwnedMDT->recalculate(*MF); MDT = OwnedMDT.get(); } // Generate LoopInfo from it. OwnedMLI = std::make_unique(); - OwnedMLI->analyze(MDT->getBase()); + OwnedMLI->analyze(*MDT); MLI = OwnedMLI.get(); } diff --git a/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp b/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp index 748dd0ca9858..ade67bb545d1 100644 --- a/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp +++ b/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp @@ -2782,7 +2782,7 @@ void InstrRefBasedLDV::BlockPHIPlacement( // Apply IDF calculator to the designated set of location defs, storing // required PHIs into PHIBlocks. Uses the dominator tree stored in the // InstrRefBasedLDV object. - IDFCalculatorBase IDF(DomTree->getBase()); + IDFCalculatorBase IDF(*DomTree); IDF.setLiveInBlocks(AllBlocks); IDF.setDefiningBlocks(DefBlocks); diff --git a/llvm/lib/CodeGen/LiveDebugValues/LiveDebugValues.cpp b/llvm/lib/CodeGen/LiveDebugValues/LiveDebugValues.cpp index a2b166227194..a7f089928f84 100644 --- a/llvm/lib/CodeGen/LiveDebugValues/LiveDebugValues.cpp +++ b/llvm/lib/CodeGen/LiveDebugValues/LiveDebugValues.cpp @@ -112,7 +112,7 @@ bool LiveDebugValues::runOnMachineFunction(MachineFunction &MF) { MachineDominatorTree *DomTree = nullptr; if (InstrRefBased) { DomTree = &MDT; - MDT.calculate(MF); + MDT.recalculate(MF); TheImpl = &*InstrRefImpl; } diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp index 5d06af3ebf33..5ac6472a01e9 100644 --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -16,11 +16,13 @@ #include "llvm/CodeGen/LiveIntervals.h" #include "llvm/CodeGen/LivePhysRegs.h" #include "llvm/CodeGen/LiveVariables.h" +#include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineJumpTableInfo.h" #include "llvm/CodeGen/MachineLoopInfo.h" +#include "llvm/CodeGen/MachinePostDominators.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/SlotIndexes.h" #include "llvm/CodeGen/TargetInstrInfo.h" @@ -1146,7 +1148,7 @@ public: MachineBasicBlock *MachineBasicBlock::SplitCriticalEdge( MachineBasicBlock *Succ, Pass *P, MachineFunctionAnalysisManager *MFAM, - std::vector> *LiveInSets) { + std::vector> *LiveInSets, MachineDomTreeUpdater *MDTU) { assert((P || MFAM) && "Need a way to get analysis results!"); if (!canSplitCriticalEdge(Succ)) return nullptr; @@ -1346,8 +1348,8 @@ MachineBasicBlock *MachineBasicBlock::SplitCriticalEdge( LIS->repairIntervalsInRange(this, getFirstTerminator(), end(), UsedRegs); } - if (auto *MDT = GET_RESULT(MachineDominatorTree, getDomTree, )) - MDT->recordSplitCriticalEdge(this, Succ, NMBB); + if (MDTU) + MDTU->splitCriticalEdge(this, Succ, NMBB); if (MachineLoopInfo *MLI = GET_RESULT(MachineLoop, getLI, Info)) if (MachineLoop *TIL = MLI->getLoopFor(this)) { diff --git a/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp b/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp index a640fc007903..72e4be0165bf 100644 --- a/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp +++ b/llvm/lib/CodeGen/MachineDomTreeUpdater.cpp @@ -25,6 +25,13 @@ GenericDomTreeUpdater::recalculate(MachineFunction &MF); +template void GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, + MachinePostDominatorTree>::applyUpdatesImpl(); +template void GenericDomTreeUpdater< + MachineDomTreeUpdater, MachineDominatorTree, + MachinePostDominatorTree>::applyUpdatesImpl(); + bool MachineDomTreeUpdater::forceFlushDeletedBB() { if (DeletedBBs.empty()) return false; diff --git a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp index 6a8ede4feb93..ed69ed931c5c 100644 --- a/llvm/lib/CodeGen/MachineDominanceFrontier.cpp +++ b/llvm/lib/CodeGen/MachineDominanceFrontier.cpp @@ -38,8 +38,7 @@ char &llvm::MachineDominanceFrontierID = MachineDominanceFrontier::ID; bool MachineDominanceFrontier::runOnMachineFunction(MachineFunction &) { releaseMemory(); - Base.analyze( - getAnalysis().getDomTree().getBase()); + Base.analyze(getAnalysis().getDomTree()); return false; } diff --git a/llvm/lib/CodeGen/MachineDominators.cpp b/llvm/lib/CodeGen/MachineDominators.cpp index a2cc8fdfa7c9..67a91c87bb1b 100644 --- a/llvm/lib/CodeGen/MachineDominators.cpp +++ b/llvm/lib/CodeGen/MachineDominators.cpp @@ -95,12 +95,6 @@ MachineDominatorTreeWrapperPass::MachineDominatorTreeWrapperPass() *PassRegistry::getPassRegistry()); } -void MachineDominatorTree::calculate(MachineFunction &F) { - CriticalEdgesToSplit.clear(); - NewBBs.clear(); - recalculate(F); -} - char &llvm::MachineDominatorsID = MachineDominatorTreeWrapperPass::ID; bool MachineDominatorTreeWrapperPass::runOnMachineFunction(MachineFunction &F) { @@ -121,71 +115,3 @@ void MachineDominatorTreeWrapperPass::print(raw_ostream &OS, if (DT) DT->print(OS); } - -void MachineDominatorTree::applySplitCriticalEdges() const { - // Bail out early if there is nothing to do. - if (CriticalEdgesToSplit.empty()) - return; - - // For each element in CriticalEdgesToSplit, remember whether or not element - // is the new immediate domminator of its successor. The mapping is done by - // index, i.e., the information for the ith element of CriticalEdgesToSplit is - // the ith element of IsNewIDom. - SmallBitVector IsNewIDom(CriticalEdgesToSplit.size(), true); - size_t Idx = 0; - - // Collect all the dominance properties info, before invalidating - // the underlying DT. - for (CriticalEdge &Edge : CriticalEdgesToSplit) { - // Update dominator information. - MachineBasicBlock *Succ = Edge.ToBB; - MachineDomTreeNode *SuccDTNode = Base::getNode(Succ); - - for (MachineBasicBlock *PredBB : Succ->predecessors()) { - if (PredBB == Edge.NewBB) - continue; - // If we are in this situation: - // FromBB1 FromBB2 - // + + - // + + + + - // + + + + - // ... Split1 Split2 ... - // + + - // + + - // + - // Succ - // Instead of checking the domiance property with Split2, we check it with - // FromBB2 since Split2 is still unknown of the underlying DT structure. - if (NewBBs.count(PredBB)) { - assert(PredBB->pred_size() == 1 && "A basic block resulting from a " - "critical edge split has more " - "than one predecessor!"); - PredBB = *PredBB->pred_begin(); - } - if (!Base::dominates(SuccDTNode, Base::getNode(PredBB))) { - IsNewIDom[Idx] = false; - break; - } - } - ++Idx; - } - - // Now, update DT with the collected dominance properties info. - Idx = 0; - for (CriticalEdge &Edge : CriticalEdgesToSplit) { - // We know FromBB dominates NewBB. - MachineDomTreeNode *NewDTNode = - const_cast(this)->Base::addNewBlock( - Edge.NewBB, Edge.FromBB); - - // If all the other predecessors of "Succ" are dominated by "Succ" itself - // then the new block is the new immediate dominator of "Succ". Otherwise, - // the new block doesn't dominate anything. - if (IsNewIDom[Idx]) - const_cast(this)->Base::changeImmediateDominator( - Base::getNode(Edge.ToBB), NewDTNode); - ++Idx; - } - NewBBs.clear(); - CriticalEdgesToSplit.clear(); -} diff --git a/llvm/lib/CodeGen/MachineLICM.cpp b/llvm/lib/CodeGen/MachineLICM.cpp index d21059189b18..d1d5509dc482 100644 --- a/llvm/lib/CodeGen/MachineLICM.cpp +++ b/llvm/lib/CodeGen/MachineLICM.cpp @@ -24,6 +24,7 @@ #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineBlockFrequencyInfo.h" +#include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" @@ -133,7 +134,7 @@ namespace { AliasAnalysis *AA = nullptr; // Alias analysis info. MachineBlockFrequencyInfo *MBFI = nullptr; // Machine block frequncy info MachineLoopInfo *MLI = nullptr; // Current MachineLoopInfo - MachineDominatorTree *DT = nullptr; // Machine dominator tree for the cur loop + MachineDomTreeUpdater *MDTU = nullptr; // Wraps current dominator tree // State that is updated as we process loops bool Changed = false; // True if a loop is changed. @@ -375,7 +376,9 @@ bool MachineLICMImpl::run(MachineFunction &MF) { .getManager() .getResult(MF.getFunction()) : &LegacyPass->getAnalysis().getAAResults(); - DT = GET_RESULT(MachineDominatorTree, getDomTree, ); + MachineDomTreeUpdater DTU(GET_RESULT(MachineDominatorTree, getDomTree, ), + MachineDomTreeUpdater::UpdateStrategy::Lazy); + MDTU = &DTU; MLI = GET_RESULT(MachineLoop, getLI, Info); MBFI = DisableHoistingToHotterBlocks != UseBFI::None ? GET_RESULT(MachineBlockFrequency, getMBFI, Info) @@ -421,7 +424,7 @@ bool MachineLICMImpl::run(MachineFunction &MF) { else { // CSEMap is initialized for loop header when the first instruction is // being hoisted. - MachineDomTreeNode *N = DT->getNode(CurLoop->getHeader()); + MachineDomTreeNode *N = MDTU->getDomTree().getNode(CurLoop->getHeader()); FirstInLoop = true; HoistOutOfLoop(N, CurLoop, CurPreheader); CSEMap.clear(); @@ -764,7 +767,7 @@ bool MachineLICMImpl::IsGuaranteedToExecute(MachineBasicBlock *BB, SmallVector CurrentLoopExitingBlocks; CurLoop->getExitingBlocks(CurrentLoopExitingBlocks); for (MachineBasicBlock *CurrentLoopExitingBlock : CurrentLoopExitingBlocks) - if (!DT->dominates(BB, CurrentLoopExitingBlock)) { + if (!MDTU->getDomTree().dominates(BB, CurrentLoopExitingBlock)) { SpeculationState = SpeculateTrue; return false; } @@ -1600,7 +1603,7 @@ bool MachineLICMImpl::MayCSE(MachineInstr *MI) { unsigned Opcode = MI->getOpcode(); for (auto &Map : CSEMap) { // Check this CSEMap's preheader dominates MI's basic block. - if (DT->dominates(Map.first, MI->getParent())) { + if (MDTU->getDomTree().dominates(Map.first, MI->getParent())) { DenseMap>::iterator CI = Map.second.find(Opcode); // Do not CSE implicit_def so ProcessImplicitDefs can properly propagate @@ -1668,7 +1671,7 @@ unsigned MachineLICMImpl::Hoist(MachineInstr *MI, MachineBasicBlock *Preheader, bool HasCSEDone = false; for (auto &Map : CSEMap) { // Check this CSEMap's preheader dominates MI's basic block. - if (DT->dominates(Map.first, MI->getParent())) { + if (MDTU->getDomTree().dominates(Map.first, MI->getParent())) { DenseMap>::iterator CI = Map.second.find(Opcode); if (CI != Map.second.end()) { @@ -1732,7 +1735,7 @@ MachineLICMImpl::getCurPreheader(MachineLoop *CurLoop, } CurPreheader = Pred->SplitCriticalEdge(CurLoop->getHeader(), LegacyPass, - MFAM, nullptr); + MFAM, nullptr, MDTU); if (!CurPreheader) { CurPreheader = reinterpret_cast(-1); return nullptr; diff --git a/llvm/lib/CodeGen/MachineLoopInfo.cpp b/llvm/lib/CodeGen/MachineLoopInfo.cpp index b0d74ecd6a85..d6906bacde0e 100644 --- a/llvm/lib/CodeGen/MachineLoopInfo.cpp +++ b/llvm/lib/CodeGen/MachineLoopInfo.cpp @@ -77,7 +77,7 @@ bool MachineLoopInfo::invalidate( void MachineLoopInfo::calculate(MachineDominatorTree &MDT) { releaseMemory(); - analyze(MDT.getBase()); + analyze(MDT); } void MachineLoopInfoWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { diff --git a/llvm/lib/CodeGen/MachineSink.cpp b/llvm/lib/CodeGen/MachineSink.cpp index 7d0bedab7cda..bdf1ef68109d 100644 --- a/llvm/lib/CodeGen/MachineSink.cpp +++ b/llvm/lib/CodeGen/MachineSink.cpp @@ -30,6 +30,7 @@ #include "llvm/CodeGen/MachineBlockFrequencyInfo.h" #include "llvm/CodeGen/MachineBranchProbabilityInfo.h" #include "llvm/CodeGen/MachineCycleAnalysis.h" +#include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -747,8 +748,11 @@ bool MachineSinking::runOnMachineFunction(MachineFunction &MF) { MadeChange |= ProcessBlock(MBB); // If we have anything we marked as toSplit, split it now. + MachineDomTreeUpdater MDTU(DT, PDT, + MachineDomTreeUpdater::UpdateStrategy::Lazy); for (const auto &Pair : ToSplit) { - auto NewSucc = Pair.first->SplitCriticalEdge(Pair.second, *this); + auto NewSucc = + Pair.first->SplitCriticalEdge(Pair.second, *this, nullptr, &MDTU); if (NewSucc != nullptr) { LLVM_DEBUG(dbgs() << " *** Splitting critical edge: " << printMBBReference(*Pair.first) << " -- " diff --git a/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp b/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp index 7548fc8141ec..a4b78c1c75ce 100644 --- a/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp +++ b/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp @@ -199,8 +199,7 @@ void MachineUniformityAnalysisPass::getAnalysisUsage(AnalysisUsage &AU) const { } bool MachineUniformityAnalysisPass::runOnMachineFunction(MachineFunction &MF) { - auto &DomTree = - getAnalysis().getDomTree().getBase(); + auto &DomTree = getAnalysis().getDomTree(); auto &CI = getAnalysis().getCycleInfo(); // FIXME: Query TTI::hasBranchDivergence. -run-pass seems to end up with a // default NoTTI diff --git a/llvm/lib/CodeGen/PHIElimination.cpp b/llvm/lib/CodeGen/PHIElimination.cpp index e5f40771eda8..b71e5b853868 100644 --- a/llvm/lib/CodeGen/PHIElimination.cpp +++ b/llvm/lib/CodeGen/PHIElimination.cpp @@ -22,6 +22,7 @@ #include "llvm/CodeGen/LiveIntervals.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/MachineBasicBlock.h" +#include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -90,7 +91,8 @@ class PHIEliminationImpl { /// Split critical edges where necessary for good coalescer performance. bool SplitPHIEdges(MachineFunction &MF, MachineBasicBlock &MBB, MachineLoopInfo *MLI, - std::vector> *LiveInSets); + std::vector> *LiveInSets, + MachineDomTreeUpdater &MDTU); // These functions are temporary abstractions around LiveVariables and // LiveIntervals, so they can go away when LiveVariables does. @@ -203,6 +205,16 @@ void PHIElimination::getAnalysisUsage(AnalysisUsage &AU) const { bool PHIEliminationImpl::run(MachineFunction &MF) { MRI = &MF.getRegInfo(); + MachineDominatorTree *MDT = nullptr; + if (P) { + auto *MDTWrapper = + P->getAnalysisIfAvailable(); + MDT = MDTWrapper ? &MDTWrapper->getDomTree() : nullptr; + } else { + MDT = MFAM->getCachedResult(MF); + } + MachineDomTreeUpdater MDTU(MDT, MachineDomTreeUpdater::UpdateStrategy::Lazy); + bool Changed = false; // Split critical edges to help the coalescer. @@ -237,7 +249,8 @@ bool PHIEliminationImpl::run(MachineFunction &MF) { } for (auto &MBB : MF) - Changed |= SplitPHIEdges(MF, MBB, MLI, (LV ? &LiveInSets : nullptr)); + Changed |= + SplitPHIEdges(MF, MBB, MLI, (LV ? &LiveInSets : nullptr), MDTU); } // This pass takes the function out of SSA form. @@ -268,10 +281,6 @@ bool PHIEliminationImpl::run(MachineFunction &MF) { MF.deleteMachineInstr(I.first); } - // TODO: we should use the incremental DomTree updater here. - if (Changed && MDT) - MDT->getBase().recalculate(MF); - LoweredPHIs.clear(); ImpDefs.clear(); VRegPHIUseCount.clear(); @@ -752,7 +761,7 @@ void PHIEliminationImpl::analyzePHINodes(const MachineFunction &MF) { bool PHIEliminationImpl::SplitPHIEdges( MachineFunction &MF, MachineBasicBlock &MBB, MachineLoopInfo *MLI, - std::vector> *LiveInSets) { + std::vector> *LiveInSets, MachineDomTreeUpdater &MDTU) { if (MBB.empty() || !MBB.front().isPHI() || MBB.isEHPad()) return false; // Quick exit for basic blocks without PHIs. @@ -819,8 +828,8 @@ bool PHIEliminationImpl::SplitPHIEdges( } if (!ShouldSplit && !SplitAllCriticalEdges) continue; - if (!(P ? PreMBB->SplitCriticalEdge(&MBB, *P, LiveInSets) - : PreMBB->SplitCriticalEdge(&MBB, *MFAM, LiveInSets))) { + if (!(P ? PreMBB->SplitCriticalEdge(&MBB, *P, LiveInSets, &MDTU) + : PreMBB->SplitCriticalEdge(&MBB, *MFAM, LiveInSets, &MDTU))) { LLVM_DEBUG(dbgs() << "Failed to split critical edge.\n"); continue; } diff --git a/llvm/lib/CodeGen/XRayInstrumentation.cpp b/llvm/lib/CodeGen/XRayInstrumentation.cpp index 06a85fb61b31..9035e10716c3 100644 --- a/llvm/lib/CodeGen/XRayInstrumentation.cpp +++ b/llvm/lib/CodeGen/XRayInstrumentation.cpp @@ -176,7 +176,7 @@ bool XRayInstrumentation::runOnMachineFunction(MachineFunction &MF) { auto *MDT = MDTWrapper ? &MDTWrapper->getDomTree() : nullptr; MachineDominatorTree ComputedMDT; if (!MDT) { - ComputedMDT.getBase().recalculate(MF); + ComputedMDT.recalculate(MF); MDT = &ComputedMDT; } @@ -185,7 +185,7 @@ bool XRayInstrumentation::runOnMachineFunction(MachineFunction &MF) { auto *MLI = MLIWrapper ? &MLIWrapper->getLI() : nullptr; MachineLoopInfo ComputedMLI; if (!MLI) { - ComputedMLI.analyze(MDT->getBase()); + ComputedMLI.analyze(*MDT); MLI = &ComputedMLI; } diff --git a/llvm/lib/Target/AMDGPU/SILateBranchLowering.cpp b/llvm/lib/Target/AMDGPU/SILateBranchLowering.cpp index 8dec5ded848c..d02173f57ee3 100644 --- a/llvm/lib/Target/AMDGPU/SILateBranchLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SILateBranchLowering.cpp @@ -113,7 +113,7 @@ static void splitBlock(MachineBasicBlock &MBB, MachineInstr &MI, DTUpdates.push_back({DomTreeT::Delete, &MBB, Succ}); } DTUpdates.push_back({DomTreeT::Insert, &MBB, SplitBB}); - MDT->getBase().applyUpdates(DTUpdates); + MDT->applyUpdates(DTUpdates); } void SILateBranchLowering::expandChainCall(MachineInstr &MI) { @@ -141,7 +141,7 @@ void SILateBranchLowering::earlyTerm(MachineInstr &MI, splitBlock(MBB, *BranchMI, MDT); MBB.addSuccessor(EarlyExitBlock); - MDT->getBase().insertEdge(&MBB, EarlyExitBlock); + MDT->insertEdge(&MBB, EarlyExitBlock); } bool SILateBranchLowering::runOnMachineFunction(MachineFunction &MF) { @@ -237,7 +237,7 @@ bool SILateBranchLowering::runOnMachineFunction(MachineFunction &MF) { } MBB->addSuccessor(EmptyMBBAtEnd); - MDT->getBase().insertEdge(MBB, EmptyMBBAtEnd); + MDT->insertEdge(MBB, EmptyMBBAtEnd); BuildMI(*MBB, MI, MI->getDebugLoc(), TII->get(AMDGPU::S_BRANCH)) .addMBB(EmptyMBBAtEnd); MI->eraseFromParent(); diff --git a/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp b/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp index 3c76da408527..5805ec658fd6 100644 --- a/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp +++ b/llvm/lib/Target/AMDGPU/SILowerI1Copies.cpp @@ -486,7 +486,7 @@ bool PhiLoweringHelper::lowerPhis() { if (Vreg1Phis.empty()) return false; - DT->getBase().updateDFSNumbers(); + DT->updateDFSNumbers(); MachineBasicBlock *PrevMBB = nullptr; for (MachineInstr *MI : Vreg1Phis) { MachineBasicBlock &MBB = *MI->getParent(); diff --git a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp index fba1d0c02695..9fbb847da2af 100644 --- a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp +++ b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp @@ -786,7 +786,7 @@ MachineBasicBlock *SIWholeQuadMode::splitBlock(MachineBasicBlock *BB, } DTUpdates.push_back({DomTreeT::Insert, BB, SplitBB}); if (MDT) - MDT->getBase().applyUpdates(DTUpdates); + MDT->applyUpdates(DTUpdates); if (PDT) PDT->applyUpdates(DTUpdates); diff --git a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp index 48acd9da9587..a35f7a3350f8 100644 --- a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp @@ -413,7 +413,7 @@ void HexagonFrameLowering::findShrunkPrologEpilog(MachineFunction &MF, auto &HRI = *MF.getSubtarget().getRegisterInfo(); MachineDominatorTree MDT; - MDT.calculate(MF); + MDT.recalculate(MF); MachinePostDominatorTree MPT; MPT.recalculate(MF); diff --git a/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp b/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp index ea1b6e97aa32..ab4c70aee486 100644 --- a/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp +++ b/llvm/lib/Target/X86/X86FlagsCopyLowering.cpp @@ -277,8 +277,7 @@ bool X86FlagsCopyLoweringPass::runOnMachineFunction(MachineFunction &MF) { if (MDTWrapper) { MDT = &MDTWrapper->getDomTree(); } else { - OwnedMDT = std::make_unique(); - OwnedMDT->getBase().recalculate(MF); + OwnedMDT = std::make_unique(MF); MDT = OwnedMDT.get(); } diff --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp index 5f0697f5aaad..40bc6b180fb8 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp +++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp @@ -65,7 +65,7 @@ static bool shouldNotRemoveInstruction(const TargetInstrInfo &TII, static void extractInstrFromFunction(Oracle &O, MachineFunction &MF) { MachineDominatorTree MDT; - MDT.calculate(MF); + MDT.recalculate(MF); auto MRI = &MF.getRegInfo(); SetVector ToDelete; diff --git a/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp b/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp index 0777bbe3887b..cabfc2aba57c 100644 --- a/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp +++ b/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp @@ -15,6 +15,7 @@ #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/Support/SourceMgr.h" +#include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "gtest/gtest.h" #include @@ -787,3 +788,45 @@ TEST(DomTreeUpdater, LazyUpdateDeduplicationTest) { DTU.applyUpdates({{DominatorTree::Insert, BB0, BB2}}); ASSERT_TRUE(DTU.getDomTree().verify()); } + +TEST(DomTreeUpdater, CriticalEdgeSplitTest) { + StringRef FuncName = "f"; + StringRef ModuleString = R"( +declare void @use1(i32) + +define void @f(i32 %i, i1 %c) { +entry: + %A = icmp eq i32 %i, 0 ; [#uses=1] + br i1 %A, label %brtrue, label %brfalse + +brtrue: ; preds = %entry + call void @use1( i32 %i ) + br label %brfalse + +brfalse: ; preds = %brtrue, %entry + call void @use1( i32 %i ) + ret void +} + )"; + // Make the module. + LLVMContext Context; + std::unique_ptr M = makeLLVMModule(Context, ModuleString); + Function *F = M->getFunction(FuncName); + + // Make the DTU. + DominatorTree DT(*F); + DomTreeUpdater DTU(&DT, nullptr, DomTreeUpdater::UpdateStrategy::Lazy); + ASSERT_TRUE(DTU.getDomTree().verify()); + + CriticalEdgeSplittingOptions Opts; + SplitAllCriticalEdges(*F, Opts); + + Function::iterator FI = F->begin(); + BasicBlock *BBEntry = &*FI++; + BasicBlock *SplitB = &*FI++; + [[maybe_unused]] BasicBlock *BBTrue = &*FI++; + BasicBlock *BBFalse = &*FI++; + DTU.splitCriticalEdge(BBEntry, BBFalse, SplitB); + DominatorTree NewDT(*F); + ASSERT_FALSE(NewDT.compare(DTU.getDomTree())); +} diff --git a/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp b/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp index 9bbbb352efdc..223a5714f62f 100644 --- a/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp +++ b/llvm/unittests/Target/WebAssembly/WebAssemblyExceptionInfoTest.cpp @@ -167,8 +167,8 @@ body: | WebAssemblyExceptionInfo WEI; MachineDominatorTree MDT; MachineDominanceFrontier MDF; - MDT.calculate(*MF); - MDF.getBase().analyze(MDT.getBase()); + MDT.recalculate(*MF); + MDF.getBase().analyze(MDT); WEI.recalculate(*MF, MDT, MDF); // Exception info structure: @@ -341,8 +341,8 @@ body: | WebAssemblyExceptionInfo WEI; MachineDominatorTree MDT; MachineDominanceFrontier MDF; - MDT.calculate(*MF); - MDF.getBase().analyze(MDT.getBase()); + MDT.recalculate(*MF); + MDF.getBase().analyze(MDT); WEI.recalculate(*MF, MDT, MDF); // Exception info structure: -- cgit v1.2.3 From 02bcaca5995de283c85acfcca61a39baac315794 Mon Sep 17 00:00:00 2001 From: Mingming Liu Date: Thu, 12 Dec 2024 19:43:25 -0800 Subject: [docs]Fix a typo around '#pragma clang section' (#119791) --- clang/docs/LanguageExtensions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst index 6a886a49ea07..54b6f947a6a5 100644 --- a/clang/docs/LanguageExtensions.rst +++ b/clang/docs/LanguageExtensions.rst @@ -5551,7 +5551,7 @@ The ``#pragma clang section`` directive obeys the following rules: * Global variables that are initialized to zero will be placed in the named bss section, if one is present. -* The ``#pragma clang section`` directive does not does try to infer section-kind +* The ``#pragma clang section`` directive does not try to infer section-kind from the name. For example, naming a section "``.bss.mySec``" does NOT mean it will be a bss section name. -- cgit v1.2.3 From 82204154b7bd1f8c487c94c7ef00399d776b29f0 Mon Sep 17 00:00:00 2001 From: Han-Kuan Chen Date: Fri, 13 Dec 2024 12:06:10 +0800 Subject: [SLP] Make getSameOpcode support different instructions if they have same semantics. (#112181) --- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 242 ++++++++++++++++++--- .../Transforms/SLPVectorizer/AArch64/vec3-base.ll | 8 +- .../reversed-strided-node-with-external-ptr.ll | 17 +- .../Transforms/SLPVectorizer/RISCV/vec3-base.ll | 8 +- .../Transforms/SLPVectorizer/X86/barriercall.ll | 6 +- .../SLPVectorizer/X86/bottom-to-top-reorder.ll | 27 +-- .../SLPVectorizer/X86/extract-scalar-from-undef.ll | 36 ++- .../Transforms/SLPVectorizer/X86/extractcost.ll | 10 +- .../X86/minbitwidth-drop-wrapping-flags.ll | 4 +- .../X86/multi-extracts-bv-combined.ll | 4 +- .../test/Transforms/SLPVectorizer/X86/vec3-base.ll | 19 +- .../SLPVectorizer/alternate-opcode-sindle-bv.ll | 36 +-- .../resized-alt-shuffle-after-minbw.ll | 62 +++--- .../SLPVectorizer/shuffle-mask-resized.ll | 4 +- 14 files changed, 324 insertions(+), 159 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 0e11e8704db2..f1391ae93c86 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -842,8 +842,123 @@ public: static InstructionsState invalid() { return {nullptr, nullptr}; } }; +struct InterchangeableInstruction { + unsigned Opcode; + SmallVector Ops; + template + InterchangeableInstruction(unsigned Opcode, ArgTypes &&...Args) + : Opcode(Opcode), Ops{std::forward(Args)...} {} +}; + +bool operator<(const InterchangeableInstruction &LHS, + const InterchangeableInstruction &RHS) { + return LHS.Opcode < RHS.Opcode; +} + } // end anonymous namespace +/// \returns a sorted list of interchangeable instructions by instruction opcode +/// that \p I can be converted to. +/// e.g., +/// x << y -> x * (2^y) +/// x << 1 -> x * 2 +/// x << 0 -> x * 1 -> x - 0 -> x + 0 -> x & 11...1 -> x | 0 +/// x * 0 -> x & 0 +/// x * -1 -> 0 - x +/// TODO: support more patterns +static SmallVector +getInterchangeableInstruction(Instruction *I) { + // PII = Possible Interchangeable Instruction + SmallVector PII; + unsigned Opcode = I->getOpcode(); + PII.emplace_back(Opcode, I->operands()); + if (!is_contained({Instruction::Shl, Instruction::Mul, Instruction::Sub, + Instruction::Add}, + Opcode)) + return PII; + Constant *C; + if (match(I, m_BinOp(m_Value(), m_Constant(C)))) { + ConstantInt *V = nullptr; + if (auto *CI = dyn_cast(C)) { + V = CI; + } else if (auto *CDV = dyn_cast(C)) { + if (auto *CI = dyn_cast_if_present(CDV->getSplatValue())) + V = CI; + } + if (!V) + return PII; + Value *Op0 = I->getOperand(0); + Type *Op1Ty = I->getOperand(1)->getType(); + const APInt &Op1Int = V->getValue(); + Constant *Zero = + ConstantInt::get(Op1Ty, APInt::getZero(Op1Int.getBitWidth())); + Constant *UnsignedMax = + ConstantInt::get(Op1Ty, APInt::getMaxValue(Op1Int.getBitWidth())); + switch (Opcode) { + case Instruction::Shl: { + PII.emplace_back(Instruction::Mul, Op0, + ConstantInt::get(Op1Ty, 1 << Op1Int.getZExtValue())); + if (Op1Int.isZero()) { + PII.emplace_back(Instruction::Sub, Op0, Zero); + PII.emplace_back(Instruction::Add, Op0, Zero); + PII.emplace_back(Instruction::And, Op0, UnsignedMax); + PII.emplace_back(Instruction::Or, Op0, Zero); + } + break; + } + case Instruction::Mul: { + if (Op1Int.isOne()) { + PII.emplace_back(Instruction::Sub, Op0, Zero); + PII.emplace_back(Instruction::Add, Op0, Zero); + PII.emplace_back(Instruction::And, Op0, UnsignedMax); + PII.emplace_back(Instruction::Or, Op0, Zero); + } else if (Op1Int.isZero()) { + PII.emplace_back(Instruction::And, Op0, Zero); + } else if (Op1Int.isAllOnes()) { + PII.emplace_back(Instruction::Sub, Zero, Op0); + } + break; + } + case Instruction::Sub: + if (Op1Int.isZero()) { + PII.emplace_back(Instruction::Add, Op0, Zero); + PII.emplace_back(Instruction::And, Op0, UnsignedMax); + PII.emplace_back(Instruction::Or, Op0, Zero); + } + break; + case Instruction::Add: + if (Op1Int.isZero()) { + PII.emplace_back(Instruction::And, Op0, UnsignedMax); + PII.emplace_back(Instruction::Or, Op0, Zero); + } + break; + } + } + // std::set_intersection requires a sorted range. + sort(PII); + return PII; +} + +/// \returns the Op and operands which \p I convert to. +static std::pair> +getInterchangeableInstruction(Instruction *I, Instruction *MainOp, + Instruction *AltOp) { + SmallVector IIList = + getInterchangeableInstruction(I); + const auto *Iter = find_if(IIList, [&](const InterchangeableInstruction &II) { + return II.Opcode == MainOp->getOpcode(); + }); + if (Iter == IIList.end()) { + Iter = find_if(IIList, [&](const InterchangeableInstruction &II) { + return II.Opcode == AltOp->getOpcode(); + }); + assert(Iter != IIList.end() && + "Cannot find an interchangeable instruction."); + return std::make_pair(AltOp, Iter->Ops); + } + return std::make_pair(MainOp, Iter->Ops); +} + /// \returns true if \p Opcode is allowed as part of the main/alternate /// instruction for SLP vectorization. /// @@ -957,6 +1072,22 @@ static InstructionsState getSameOpcode(ArrayRef VL, return InstructionsState::invalid(); } bool AnyPoison = InstCnt != VL.size(); + // Currently, this is only used for binary ops. + // TODO: support all instructions + SmallVector InterchangeableOpcode = + getInterchangeableInstruction(cast(V)); + SmallVector AlternateInterchangeableOpcode; + auto UpdateInterchangeableOpcode = + [](SmallVector &LHS, + ArrayRef RHS) { + SmallVector NewInterchangeableOpcode; + std::set_intersection(LHS.begin(), LHS.end(), RHS.begin(), RHS.end(), + std::back_inserter(NewInterchangeableOpcode)); + if (NewInterchangeableOpcode.empty()) + return false; + LHS.swap(NewInterchangeableOpcode); + return true; + }; for (int Cnt = 0, E = VL.size(); Cnt < E; Cnt++) { auto *I = dyn_cast(VL[Cnt]); if (!I) @@ -969,14 +1100,32 @@ static InstructionsState getSameOpcode(ArrayRef VL, return InstructionsState::invalid(); unsigned InstOpcode = I->getOpcode(); if (IsBinOp && isa(I)) { - if (InstOpcode == Opcode || InstOpcode == AltOpcode) + SmallVector ThisInterchangeableOpcode( + getInterchangeableInstruction(I)); + if (UpdateInterchangeableOpcode(InterchangeableOpcode, + ThisInterchangeableOpcode)) continue; - if (Opcode == AltOpcode && isValidForAlternation(InstOpcode) && - isValidForAlternation(Opcode)) { - AltOpcode = InstOpcode; - AltIndex = Cnt; + if (AlternateInterchangeableOpcode.empty()) { + InterchangeableOpcode.erase( + remove_if(InterchangeableOpcode, + [](const InterchangeableInstruction &I) { + return !isValidForAlternation(I.Opcode); + }), + InterchangeableOpcode.end()); + ThisInterchangeableOpcode.erase( + remove_if(ThisInterchangeableOpcode, + [](const InterchangeableInstruction &I) { + return !isValidForAlternation(I.Opcode); + }), + ThisInterchangeableOpcode.end()); + if (InterchangeableOpcode.empty() || ThisInterchangeableOpcode.empty()) + return InstructionsState::invalid(); + AlternateInterchangeableOpcode.swap(ThisInterchangeableOpcode); continue; } + if (UpdateInterchangeableOpcode(AlternateInterchangeableOpcode, + ThisInterchangeableOpcode)) + continue; } else if (IsCastOp && isa(I)) { Value *Op0 = IBase->getOperand(0); Type *Ty0 = Op0->getType(); @@ -1077,6 +1226,24 @@ static InstructionsState getSameOpcode(ArrayRef VL, return InstructionsState::invalid(); } + if (IsBinOp) { + auto FindOp = [&](ArrayRef CandidateOp) { + for (Value *V : VL) { + if (isa(V)) + continue; + for (const InterchangeableInstruction &I : CandidateOp) + if (cast(V)->getOpcode() == I.Opcode) + return cast(V); + } + llvm_unreachable( + "Cannot find the candidate instruction for InstructionsState."); + }; + Instruction *MainOp = FindOp(InterchangeableOpcode); + Instruction *AltOp = AlternateInterchangeableOpcode.empty() + ? MainOp + : FindOp(AlternateInterchangeableOpcode); + return InstructionsState(MainOp, AltOp); + } return InstructionsState(cast(V), cast(VL[AltIndex])); } @@ -2407,42 +2574,46 @@ public: } /// Go through the instructions in VL and append their operands. - void appendOperandsOfVL(ArrayRef VL, Instruction *VL0) { + void appendOperandsOfVL(ArrayRef VL, Instruction *MainOp, + Instruction *AltOp) { assert(!VL.empty() && "Bad VL"); assert((empty() || VL.size() == getNumLanes()) && "Expected same number of lanes"); // IntrinsicInst::isCommutative returns true if swapping the first "two" // arguments to the intrinsic produces the same result. constexpr unsigned IntrinsicNumOperands = 2; - unsigned NumOperands = VL0->getNumOperands(); - ArgSize = isa(VL0) ? IntrinsicNumOperands : NumOperands; + unsigned NumOperands = MainOp->getNumOperands(); + ArgSize = isa(MainOp) ? IntrinsicNumOperands : NumOperands; OpsVec.resize(NumOperands); unsigned NumLanes = VL.size(); - for (unsigned OpIdx = 0; OpIdx != NumOperands; ++OpIdx) { + for (unsigned OpIdx : seq(NumOperands)) OpsVec[OpIdx].resize(NumLanes); - for (unsigned Lane = 0; Lane != NumLanes; ++Lane) { - assert((isa(VL[Lane]) || isa(VL[Lane])) && - "Expected instruction or poison value"); - // Our tree has just 3 nodes: the root and two operands. - // It is therefore trivial to get the APO. We only need to check the - // opcode of VL[Lane] and whether the operand at OpIdx is the LHS or - // RHS operand. The LHS operand of both add and sub is never attached - // to an inversese operation in the linearized form, therefore its APO - // is false. The RHS is true only if VL[Lane] is an inverse operation. - - // Since operand reordering is performed on groups of commutative - // operations or alternating sequences (e.g., +, -), we can safely - // tell the inverse operations by checking commutativity. - if (isa(VL[Lane])) { + for (auto [Lane, V] : enumerate(VL)) { + assert((isa(V) || isa(V)) && + "Expected instruction or poison value"); + if (isa(V)) { + for (unsigned OpIdx : seq(NumOperands)) OpsVec[OpIdx][Lane] = { - PoisonValue::get(VL0->getOperand(OpIdx)->getType()), true, + PoisonValue::get(MainOp->getOperand(OpIdx)->getType()), true, false}; - continue; - } - bool IsInverseOperation = !isCommutative(cast(VL[Lane])); + continue; + } + auto [SelectedOp, Ops] = + getInterchangeableInstruction(cast(V), MainOp, AltOp); + // Our tree has just 3 nodes: the root and two operands. + // It is therefore trivial to get the APO. We only need to check the + // opcode of V and whether the operand at OpIdx is the LHS or RHS + // operand. The LHS operand of both add and sub is never attached to an + // inversese operation in the linearized form, therefore its APO is + // false. The RHS is true only if V is an inverse operation. + + // Since operand reordering is performed on groups of commutative + // operations or alternating sequences (e.g., +, -), we can safely + // tell the inverse operations by checking commutativity. + bool IsInverseOperation = !isCommutative(cast(SelectedOp)); + for (unsigned OpIdx : seq(NumOperands)) { bool APO = (OpIdx == 0) ? false : IsInverseOperation; - OpsVec[OpIdx][Lane] = {cast(VL[Lane])->getOperand(OpIdx), - APO, false}; + OpsVec[OpIdx][Lane] = {Ops[OpIdx], APO, false}; } } } @@ -2549,11 +2720,12 @@ public: public: /// Initialize with all the operands of the instruction vector \p RootVL. - VLOperands(ArrayRef RootVL, Instruction *VL0, const BoUpSLP &R) + VLOperands(ArrayRef RootVL, Instruction *MainOp, + Instruction *AltOp, const BoUpSLP &R) : TLI(*R.TLI), DL(*R.DL), SE(*R.SE), R(R), - L(R.LI->getLoopFor((VL0->getParent()))) { + L(R.LI->getLoopFor(MainOp->getParent())) { // Append all the operands of RootVL. - appendOperandsOfVL(RootVL, VL0); + appendOperandsOfVL(RootVL, MainOp, AltOp); } /// \Returns a value vector with the operands across all lanes for the @@ -3345,7 +3517,7 @@ private: /// Set this bundle's operand from Scalars. void setOperand(const BoUpSLP &R, bool RequireReorder = false) { - VLOperands Ops(Scalars, MainOp, R); + VLOperands Ops(Scalars, MainOp, AltOp, R); if (RequireReorder) Ops.reorder(); for (unsigned I : seq(MainOp->getNumOperands())) @@ -8561,7 +8733,7 @@ void BoUpSLP::buildTree_rec(ArrayRef VL, unsigned Depth, LLVM_DEBUG(dbgs() << "SLP: added a vector of compares.\n"); ValueList Left, Right; - VLOperands Ops(VL, VL0, *this); + VLOperands Ops(VL, VL0, S.getAltOp(), *this); if (cast(VL0)->isCommutative()) { // Commutative predicate - collect + sort operands of the instructions // so that each side is more likely to have the same opcode. @@ -15619,7 +15791,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) { Value *V = Builder.CreateBinOp( static_cast(E->getOpcode()), LHS, RHS); - propagateIRFlags(V, E->Scalars, VL0, It == MinBWs.end()); + propagateIRFlags(V, E->Scalars, nullptr, It == MinBWs.end()); if (auto *I = dyn_cast(V)) { V = ::propagateMetadata(I, E->Scalars); // Drop nuw flags for abs(sub(commutative), true). diff --git a/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll b/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll index feb4ad865f31..c65df26fa0d5 100644 --- a/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll +++ b/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll @@ -314,10 +314,10 @@ define void @store_try_reorder(ptr %dst) { ; ; POW2-ONLY-LABEL: @store_try_reorder( ; POW2-ONLY-NEXT: entry: -; POW2-ONLY-NEXT: [[ADD:%.*]] = add i32 0, 0 -; POW2-ONLY-NEXT: store i32 [[ADD]], ptr [[DST:%.*]], align 4 -; POW2-ONLY-NEXT: [[ARRAYIDX_I1887:%.*]] = getelementptr i32, ptr [[DST]], i64 1 -; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[ARRAYIDX_I1887]], align 4 +; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 +; POW2-ONLY-NEXT: [[ADD216:%.*]] = sub i32 0, 0 +; POW2-ONLY-NEXT: [[ARRAYIDX_I1891:%.*]] = getelementptr i32, ptr [[DST]], i64 2 +; POW2-ONLY-NEXT: store i32 [[ADD216]], ptr [[ARRAYIDX_I1891]], align 4 ; POW2-ONLY-NEXT: ret void ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll index fd3d4ab80b29..74d7f1c91f3b 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll @@ -7,19 +7,18 @@ define void @test(ptr %a, i64 %0) { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x ptr> poison, ptr [[A]], i32 0 ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x ptr> [[TMP1]], <2 x ptr> poison, <2 x i32> zeroinitializer +; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x i64> , i64 [[TMP0]], i32 0 ; CHECK-NEXT: br label %[[BB:.*]] ; CHECK: [[BB]]: -; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i64 [[TMP0]], 1 -; CHECK-NEXT: [[TMP4:%.*]] = insertelement <2 x i64> poison, i64 [[TMP3]], i32 0 -; CHECK-NEXT: [[TMP5:%.*]] = insertelement <2 x i64> [[TMP4]], i64 0, i32 1 +; CHECK-NEXT: [[TMP5:%.*]] = or disjoint <2 x i64> [[TMP3]], ; CHECK-NEXT: [[TMP6:%.*]] = getelementptr double, <2 x ptr> [[TMP2]], <2 x i64> [[TMP5]] -; CHECK-NEXT: [[ARRAYIDX17_I28_1:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP3]] -; CHECK-NEXT: [[TMP7:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[TMP6]], i32 8, <2 x i1> splat (i1 true), <2 x double> poison) -; CHECK-NEXT: [[TMP8:%.*]] = load <2 x double>, ptr [[A]], align 8 -; CHECK-NEXT: [[TMP9:%.*]] = load <2 x double>, ptr [[A]], align 8 -; CHECK-NEXT: [[TMP10:%.*]] = fsub <2 x double> [[TMP8]], [[TMP9]] +; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x ptr> [[TMP6]], i32 0 +; CHECK-NEXT: [[TMP9:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[TMP6]], i32 8, <2 x i1> splat (i1 true), <2 x double> poison) +; CHECK-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr [[A]], align 8 +; CHECK-NEXT: [[TMP10:%.*]] = load <2 x double>, ptr [[A]], align 8 ; CHECK-NEXT: [[TMP11:%.*]] = fsub <2 x double> [[TMP7]], [[TMP10]] -; CHECK-NEXT: call void @llvm.experimental.vp.strided.store.v2f64.p0.i64(<2 x double> [[TMP11]], ptr align 8 [[ARRAYIDX17_I28_1]], i64 -8, <2 x i1> splat (i1 true), i32 2) +; CHECK-NEXT: [[TMP12:%.*]] = fsub <2 x double> [[TMP9]], [[TMP11]] +; CHECK-NEXT: call void @llvm.experimental.vp.strided.store.v2f64.p0.i64(<2 x double> [[TMP12]], ptr align 8 [[TMP8]], i64 -8, <2 x i1> splat (i1 true), i32 2) ; CHECK-NEXT: br label %[[BB]] ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll index 7ab5e4d6cb78..89b87a3a45d1 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll @@ -324,10 +324,10 @@ define void @store_try_reorder(ptr %dst) { ; ; POW2-ONLY-LABEL: @store_try_reorder( ; POW2-ONLY-NEXT: entry: -; POW2-ONLY-NEXT: [[ADD:%.*]] = add i32 0, 0 -; POW2-ONLY-NEXT: store i32 [[ADD]], ptr [[DST:%.*]], align 4 -; POW2-ONLY-NEXT: [[ARRAYIDX_I1887:%.*]] = getelementptr i32, ptr [[DST]], i64 1 -; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[ARRAYIDX_I1887]], align 4 +; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 +; POW2-ONLY-NEXT: [[ADD216:%.*]] = sub i32 0, 0 +; POW2-ONLY-NEXT: [[ARRAYIDX_I1891:%.*]] = getelementptr i32, ptr [[DST]], i64 2 +; POW2-ONLY-NEXT: store i32 [[ADD216]], ptr [[ARRAYIDX_I1891]], align 4 ; POW2-ONLY-NEXT: ret void ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll b/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll index f46a5d84a86c..e3b4898e8521 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll @@ -10,10 +10,8 @@ define i32 @foo(ptr nocapture %A, i32 %n) { ; CHECK-NEXT: [[CALL:%.*]] = tail call i32 (...) @bar() ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> poison, i32 [[N:%.*]], i32 0 ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <4 x i32> zeroinitializer -; CHECK-NEXT: [[TMP1:%.*]] = mul nsw <4 x i32> [[SHUFFLE]], -; CHECK-NEXT: [[TMP2:%.*]] = shl <4 x i32> [[SHUFFLE]], -; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> -; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> [[TMP3]], splat (i32 9) +; CHECK-NEXT: [[TMP2:%.*]] = mul <4 x i32> [[SHUFFLE]], +; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> [[TMP2]], splat (i32 9) ; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr [[A:%.*]], align 4 ; CHECK-NEXT: ret i32 undef ; diff --git a/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll b/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll index 889f5a95c81d..7af0c64f1874 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll @@ -4,22 +4,17 @@ define void @test(ptr %0, ptr %1, ptr %2) { ; CHECK-LABEL: @test( ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds i32, ptr [[TMP0:%.*]], i64 4 -; CHECK-NEXT: [[TMP6:%.*]] = load <4 x i32>, ptr [[TMP1:%.*]], align 4 -; CHECK-NEXT: [[TMP8:%.*]] = load <4 x i32>, ptr [[TMP0]], align 4 -; CHECK-NEXT: [[TMP10:%.*]] = load <4 x i32>, ptr [[TMP4]], align 4 -; CHECK-NEXT: [[TMP11:%.*]] = sub <4 x i32> , [[TMP8]] -; CHECK-NEXT: [[TMP12:%.*]] = sub <4 x i32> [[TMP11]], [[TMP10]] -; CHECK-NEXT: [[TMP13:%.*]] = add <4 x i32> [[TMP12]], [[TMP6]] -; CHECK-NEXT: [[TMP14:%.*]] = add <4 x i32> [[TMP13]], -; CHECK-NEXT: [[TMP15:%.*]] = sub <4 x i32> [[TMP13]], -; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <4 x i32> [[TMP14]], <4 x i32> [[TMP15]], <4 x i32> -; CHECK-NEXT: [[TMP17:%.*]] = add <4 x i32> [[TMP16]], zeroinitializer -; CHECK-NEXT: [[TMP18:%.*]] = sub <4 x i32> [[TMP16]], zeroinitializer -; CHECK-NEXT: [[TMP19:%.*]] = shufflevector <4 x i32> [[TMP17]], <4 x i32> [[TMP18]], <4 x i32> -; CHECK-NEXT: [[TMP20:%.*]] = add <4 x i32> [[TMP19]], zeroinitializer -; CHECK-NEXT: [[TMP21:%.*]] = sub <4 x i32> [[TMP19]], zeroinitializer -; CHECK-NEXT: [[TMP22:%.*]] = shufflevector <4 x i32> [[TMP20]], <4 x i32> [[TMP21]], <4 x i32> -; CHECK-NEXT: store <4 x i32> [[TMP22]], ptr [[TMP2:%.*]], align 4 +; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i32>, ptr [[TMP1:%.*]], align 4 +; CHECK-NEXT: [[TMP6:%.*]] = load <4 x i32>, ptr [[TMP0]], align 4 +; CHECK-NEXT: [[TMP7:%.*]] = load <4 x i32>, ptr [[TMP4]], align 4 +; CHECK-NEXT: [[TMP8:%.*]] = sub <4 x i32> , [[TMP6]] +; CHECK-NEXT: [[TMP9:%.*]] = sub <4 x i32> [[TMP8]], [[TMP7]] +; CHECK-NEXT: [[TMP10:%.*]] = add <4 x i32> [[TMP9]], [[TMP5]] +; CHECK-NEXT: [[TMP11:%.*]] = add <4 x i32> , [[TMP10]] +; CHECK-NEXT: [[TMP12:%.*]] = add <4 x i32> [[TMP11]], zeroinitializer +; CHECK-NEXT: [[TMP13:%.*]] = add <4 x i32> [[TMP12]], zeroinitializer +; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <4 x i32> [[TMP13]], <4 x i32> poison, <4 x i32> +; CHECK-NEXT: store <4 x i32> [[TMP14]], ptr [[TMP2:%.*]], align 4 ; CHECK-NEXT: ret void ; %4 = load i32, ptr %1, align 4 diff --git a/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll b/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll index c976525b6720..d474a5f2ceca 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll @@ -4,21 +4,17 @@ define i64 @foo(i32 %tmp7) { ; CHECK-LABEL: @foo( ; CHECK-NEXT: bb: -; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> , i32 [[TMP5:%.*]], i32 2 -; CHECK-NEXT: [[TMP3:%.*]] = sub <4 x i32> [[TMP2]], zeroinitializer -; CHECK-NEXT: [[TMP24:%.*]] = sub i32 undef, 0 -; CHECK-NEXT: [[TMP0:%.*]] = insertelement <8 x i32> , i32 [[TMP24]], i32 4 -; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x i32> [[TMP0]], i32 0, i32 5 -; CHECK-NEXT: [[TMP11:%.*]] = insertelement <8 x i32> , i32 [[TMP24]], i32 6 -; CHECK-NEXT: [[TMP12:%.*]] = call <8 x i32> @llvm.vector.insert.v8i32.v4i32(<8 x i32> poison, <4 x i32> [[TMP3]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <8 x i32> [[TMP12]], <8 x i32> [[TMP11]], <8 x i32> -; CHECK-NEXT: [[TMP5:%.*]] = add nsw <8 x i32> [[TMP1]], [[TMP4]] -; CHECK-NEXT: [[TMP6:%.*]] = sub nsw <8 x i32> [[TMP1]], [[TMP4]] -; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <8 x i32> [[TMP5]], <8 x i32> [[TMP6]], <8 x i32> -; CHECK-NEXT: [[TMP8:%.*]] = add <8 x i32> zeroinitializer, [[TMP7]] -; CHECK-NEXT: [[TMP9:%.*]] = xor <8 x i32> [[TMP8]], zeroinitializer -; CHECK-NEXT: [[TMP10:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> [[TMP9]]) -; CHECK-NEXT: [[OP_RDX:%.*]] = add i32 [[TMP10]], 0 +; CHECK-NEXT: [[TMP0:%.*]] = insertelement <8 x i32> , i32 [[TMP7:%.*]], i32 3 +; CHECK-NEXT: [[TMP1:%.*]] = sub <8 x i32> [[TMP0]], +; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <8 x i32> , <8 x i32> [[TMP1]], <8 x i32> +; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x i32> [[TMP2]], i32 0, i32 5 +; CHECK-NEXT: [[TMP4:%.*]] = add nsw <8 x i32> [[TMP3]], [[TMP1]] +; CHECK-NEXT: [[TMP5:%.*]] = sub nsw <8 x i32> [[TMP3]], [[TMP1]] +; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <8 x i32> [[TMP4]], <8 x i32> [[TMP5]], <8 x i32> +; CHECK-NEXT: [[TMP7:%.*]] = add <8 x i32> zeroinitializer, [[TMP6]] +; CHECK-NEXT: [[TMP8:%.*]] = xor <8 x i32> [[TMP7]], zeroinitializer +; CHECK-NEXT: [[TMP9:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> [[TMP8]]) +; CHECK-NEXT: [[OP_RDX:%.*]] = add i32 [[TMP9]], 0 ; CHECK-NEXT: [[TMP64:%.*]] = zext i32 [[OP_RDX]] to i64 ; CHECK-NEXT: ret i64 [[TMP64]] ; @@ -29,7 +25,7 @@ bb: %tmp4 = xor i32 %tmp3, 0 %tmp6 = sub i32 0, 0 %tmp8 = sub i32 %tmp7, 0 - %tmp9 = sub nsw i32 0, undef + %tmp9 = sub nsw i32 0, poison %tmp10 = add nsw i32 0, %tmp6 %tmp11 = sub nsw i32 0, %tmp8 %tmp12 = add i32 0, %tmp10 @@ -44,10 +40,10 @@ bb: %tmp21 = add i32 %tmp20, %tmp17 %tmp22 = sub i32 0, 0 %tmp23 = add i32 0, 0 - %tmp24 = sub i32 undef, 0 - %tmp25 = add nsw i32 %tmp23, undef + %tmp24 = sub i32 poison, 0 + %tmp25 = add nsw i32 %tmp23, poison %tmp26 = add nsw i32 %tmp24, %tmp22 - %tmp27 = sub nsw i32 undef, %tmp24 + %tmp27 = sub nsw i32 poison, %tmp24 %tmp28 = add i32 0, %tmp25 %tmp29 = xor i32 %tmp28, 0 %tmp30 = add i32 0, %tmp26 @@ -58,7 +54,7 @@ bb: %tmp35 = add i32 %tmp34, %tmp29 %tmp36 = add i32 %tmp35, 0 %tmp37 = add i32 %tmp36, %tmp33 - %tmp38 = sub nsw i32 0, undef + %tmp38 = sub nsw i32 0, poison %tmp39 = add i32 0, %tmp38 %tmp40 = xor i32 %tmp39, 0 %tmp41 = add i32 0, %tmp37 diff --git a/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll b/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll index 02c3173adc65..fc62b0b38fd5 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll @@ -9,12 +9,10 @@ define i32 @foo(ptr nocapture %A, i32 %n, i32 %m) { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> poison, i32 [[N:%.*]], i32 0 ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <4 x i32> zeroinitializer -; CHECK-NEXT: [[TMP1:%.*]] = mul nsw <4 x i32> [[SHUFFLE]], -; CHECK-NEXT: [[TMP2:%.*]] = shl <4 x i32> [[SHUFFLE]], -; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> -; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> [[TMP3]], splat (i32 9) -; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr [[A:%.*]], align 4 -; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i32> [[TMP4]], i32 0 +; CHECK-NEXT: [[TMP2:%.*]] = mul <4 x i32> [[SHUFFLE]], +; CHECK-NEXT: [[TMP3:%.*]] = add nsw <4 x i32> [[TMP2]], splat (i32 9) +; CHECK-NEXT: store <4 x i32> [[TMP3]], ptr [[A:%.*]], align 4 +; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i32> [[TMP3]], i32 0 ; CHECK-NEXT: [[EXTERNALUSE1:%.*]] = add nsw i32 [[TMP6]], [[M:%.*]] ; CHECK-NEXT: [[EXTERNALUSE2:%.*]] = mul nsw i32 [[TMP6]], [[M]] ; CHECK-NEXT: [[ADD10:%.*]] = add nsw i32 [[EXTERNALUSE1]], [[EXTERNALUSE2]] diff --git a/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll b/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll index 2a5bfa739077..daab4b6ea4c9 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll @@ -8,10 +8,8 @@ define i32 @test() { ; CHECK-NEXT: [[TMP10:%.*]] = or i8 [[A_PROMOTED]], 0 ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i8> poison, i8 [[A_PROMOTED]], i32 0 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i8> [[TMP0]], <4 x i8> poison, <4 x i32> zeroinitializer -; CHECK-NEXT: [[TMP2:%.*]] = add <4 x i8> [[TMP1]], zeroinitializer ; CHECK-NEXT: [[TMP3:%.*]] = or <4 x i8> [[TMP1]], zeroinitializer -; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> [[TMP3]], <4 x i32> -; CHECK-NEXT: [[TMP5:%.*]] = zext <4 x i8> [[TMP4]] to <4 x i16> +; CHECK-NEXT: [[TMP5:%.*]] = zext <4 x i8> [[TMP3]] to <4 x i16> ; CHECK-NEXT: [[TMP6:%.*]] = add <4 x i16> [[TMP5]], ; CHECK-NEXT: [[TMP7:%.*]] = call i16 @llvm.vector.reduce.or.v4i16(<4 x i16> [[TMP6]]) ; CHECK-NEXT: [[TMP8:%.*]] = zext i16 [[TMP7]] to i32 diff --git a/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll b/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll index e6a166c27ac4..94f2c79faa8c 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll @@ -9,9 +9,7 @@ define i32 @foo() { ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> , i32 [[D]], i32 1 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <8 x i32> ; CHECK-NEXT: [[TMP2:%.*]] = or <8 x i32> zeroinitializer, [[TMP1]] -; CHECK-NEXT: [[TMP3:%.*]] = add <8 x i32> zeroinitializer, [[TMP1]] -; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> [[TMP3]], <8 x i32> -; CHECK-NEXT: store <8 x i32> [[TMP4]], ptr getelementptr inbounds ([64 x i32], ptr null, i64 0, i64 15), align 4 +; CHECK-NEXT: store <8 x i32> [[TMP2]], ptr getelementptr inbounds ([64 x i32], ptr null, i64 0, i64 15), align 4 ; CHECK-NEXT: ret i32 0 ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll b/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll index 6e2a43ac5f9f..15dd6756cd7d 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll @@ -242,13 +242,18 @@ exit: } define void @store_try_reorder(ptr %dst) { -; CHECK-LABEL: @store_try_reorder( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[ADD:%.*]] = add i32 0, 0 -; CHECK-NEXT: store i32 [[ADD]], ptr [[DST:%.*]], align 4 -; CHECK-NEXT: [[ARRAYIDX_I1887:%.*]] = getelementptr i32, ptr [[DST]], i64 1 -; CHECK-NEXT: store <2 x i32> zeroinitializer, ptr [[ARRAYIDX_I1887]], align 4 -; CHECK-NEXT: ret void +; NON-POW2-LABEL: @store_try_reorder( +; NON-POW2-NEXT: entry: +; NON-POW2-NEXT: store <3 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 +; NON-POW2-NEXT: ret void +; +; POW2-ONLY-LABEL: @store_try_reorder( +; POW2-ONLY-NEXT: entry: +; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 +; POW2-ONLY-NEXT: [[ADD216:%.*]] = sub i32 0, 0 +; POW2-ONLY-NEXT: [[ARRAYIDX_I1891:%.*]] = getelementptr i32, ptr [[DST]], i64 2 +; POW2-ONLY-NEXT: store i32 [[ADD216]], ptr [[ARRAYIDX_I1891]], align 4 +; POW2-ONLY-NEXT: ret void ; entry: %add = add i32 0, 0 diff --git a/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll b/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll index c25002951959..e4eff0f72b35 100644 --- a/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll +++ b/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll @@ -1,18 +1,29 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 -; RUN: %if x86-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s %} -; RUN: %if aarch64-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s %} +; RUN: %if x86-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=X86 %} +; RUN: %if aarch64-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=AARCH64 %} define <2 x i32> @test(i32 %arg) { -; CHECK-LABEL: define <2 x i32> @test( -; CHECK-SAME: i32 [[ARG:%.*]]) { -; CHECK-NEXT: bb: -; CHECK-NEXT: [[OR:%.*]] = or i32 [[ARG]], 0 -; CHECK-NEXT: [[MUL:%.*]] = mul i32 0, 1 -; CHECK-NEXT: [[MUL1:%.*]] = mul i32 [[OR]], [[MUL]] -; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 0, [[MUL1]] -; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i32> poison, i32 [[OR]], i32 0 -; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i32> [[TMP0]], i32 [[MUL]], i32 1 -; CHECK-NEXT: ret <2 x i32> [[TMP1]] +; X86-LABEL: define <2 x i32> @test( +; X86-SAME: i32 [[ARG:%.*]]) { +; X86-NEXT: bb: +; X86-NEXT: [[OR:%.*]] = or i32 [[ARG]], 0 +; X86-NEXT: [[MUL:%.*]] = mul i32 0, 1 +; X86-NEXT: [[MUL1:%.*]] = mul i32 [[OR]], [[MUL]] +; X86-NEXT: [[CMP:%.*]] = icmp ugt i32 0, [[MUL1]] +; X86-NEXT: [[TMP0:%.*]] = insertelement <2 x i32> poison, i32 [[OR]], i32 0 +; X86-NEXT: [[TMP1:%.*]] = insertelement <2 x i32> [[TMP0]], i32 [[MUL]], i32 1 +; X86-NEXT: ret <2 x i32> [[TMP1]] +; +; AARCH64-LABEL: define <2 x i32> @test( +; AARCH64-SAME: i32 [[ARG:%.*]]) { +; AARCH64-NEXT: bb: +; AARCH64-NEXT: [[TMP0:%.*]] = insertelement <2 x i32> , i32 [[ARG]], i32 0 +; AARCH64-NEXT: [[TMP1:%.*]] = or <2 x i32> [[TMP0]], zeroinitializer +; AARCH64-NEXT: [[TMP2:%.*]] = extractelement <2 x i32> [[TMP1]], i32 0 +; AARCH64-NEXT: [[TMP3:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1 +; AARCH64-NEXT: [[MUL1:%.*]] = mul i32 [[TMP2]], [[TMP3]] +; AARCH64-NEXT: [[CMP:%.*]] = icmp ugt i32 0, [[MUL1]] +; AARCH64-NEXT: ret <2 x i32> [[TMP1]] ; bb: %or = or i32 %arg, 0 @@ -23,4 +34,3 @@ bb: %1 = insertelement <2 x i32> %0, i32 %mul, i32 1 ret <2 x i32> %1 } - diff --git a/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll b/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll index 61a84a67c9ff..6f9768af38ca 100644 --- a/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll +++ b/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll @@ -5,15 +5,13 @@ define void @func(i32 %0) { ; CHECK-LABEL: define void @func( ; CHECK-SAME: i32 [[TMP0:%.*]]) { ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> , i32 [[TMP0]], i32 1 -; CHECK-NEXT: [[TMP3:%.*]] = shl <4 x i32> [[TMP2]], zeroinitializer ; CHECK-NEXT: [[TMP4:%.*]] = or <4 x i32> [[TMP2]], zeroinitializer -; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> ; CHECK-NEXT: [[TMP6:%.*]] = shl i32 [[TMP0]], 0 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 -; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <32 x i32> +; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <32 x i32> ; CHECK-NEXT: [[TMP9:%.*]] = sext i32 [[TMP6]] to i64 ; CHECK-NEXT: [[TMP10:%.*]] = or i64 [[TMP9]], 0 -; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <32 x i32> +; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <32 x i32> ; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <32 x i32> [[TMP11]], <32 x i32> , <32 x i32> ; CHECK-NEXT: [[TMP13:%.*]] = insertelement <32 x i32> [[TMP12]], i32 0, i32 0 ; CHECK-NEXT: [[TMP14:%.*]] = call <32 x i32> @llvm.vector.insert.v32i32.v8i32(<32 x i32> [[TMP13]], <8 x i32> zeroinitializer, i64 16) @@ -24,61 +22,61 @@ define void @func(i32 %0) { ; CHECK-NEXT: [[TMP19:%.*]] = sext <32 x i32> [[TMP18]] to <32 x i64> ; CHECK-NEXT: [[TMP20:%.*]] = icmp slt <32 x i64> [[TMP19]], zeroinitializer ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <32 x i1> [[TMP20]], i32 31 -; CHECK-NEXT: [[TMP22:%.*]] = and i1 false, [[TMP21]] +; CHECK-NEXT: [[TMP76:%.*]] = and i1 false, [[TMP21]] ; CHECK-NEXT: [[TMP23:%.*]] = extractelement <32 x i1> [[TMP20]], i32 30 -; CHECK-NEXT: [[TMP24:%.*]] = and i1 false, [[TMP23]] +; CHECK-NEXT: [[TMP22:%.*]] = and i1 false, [[TMP23]] ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <32 x i1> [[TMP20]], i32 29 -; CHECK-NEXT: [[TMP26:%.*]] = and i1 false, [[TMP25]] +; CHECK-NEXT: [[TMP24:%.*]] = and i1 false, [[TMP25]] ; CHECK-NEXT: [[TMP27:%.*]] = extractelement <32 x i1> [[TMP20]], i32 28 -; CHECK-NEXT: [[TMP28:%.*]] = and i1 false, [[TMP27]] +; CHECK-NEXT: [[TMP26:%.*]] = and i1 false, [[TMP27]] ; CHECK-NEXT: [[TMP29:%.*]] = extractelement <32 x i1> [[TMP20]], i32 27 -; CHECK-NEXT: [[TMP30:%.*]] = and i1 false, [[TMP29]] +; CHECK-NEXT: [[TMP28:%.*]] = and i1 false, [[TMP29]] ; CHECK-NEXT: [[TMP31:%.*]] = extractelement <32 x i1> [[TMP20]], i32 26 -; CHECK-NEXT: [[TMP32:%.*]] = and i1 false, [[TMP31]] +; CHECK-NEXT: [[TMP30:%.*]] = and i1 false, [[TMP31]] ; CHECK-NEXT: [[TMP33:%.*]] = extractelement <32 x i1> [[TMP20]], i32 25 -; CHECK-NEXT: [[TMP34:%.*]] = and i1 false, [[TMP33]] +; CHECK-NEXT: [[TMP32:%.*]] = and i1 false, [[TMP33]] ; CHECK-NEXT: [[TMP35:%.*]] = extractelement <32 x i1> [[TMP20]], i32 24 -; CHECK-NEXT: [[TMP36:%.*]] = and i1 false, [[TMP35]] +; CHECK-NEXT: [[TMP34:%.*]] = and i1 false, [[TMP35]] ; CHECK-NEXT: [[TMP37:%.*]] = extractelement <32 x i1> [[TMP20]], i32 23 -; CHECK-NEXT: [[TMP38:%.*]] = and i1 false, [[TMP37]] +; CHECK-NEXT: [[TMP36:%.*]] = and i1 false, [[TMP37]] ; CHECK-NEXT: [[TMP39:%.*]] = extractelement <32 x i1> [[TMP20]], i32 22 -; CHECK-NEXT: [[TMP40:%.*]] = and i1 false, [[TMP39]] +; CHECK-NEXT: [[TMP38:%.*]] = and i1 false, [[TMP39]] ; CHECK-NEXT: [[TMP41:%.*]] = extractelement <32 x i1> [[TMP20]], i32 21 -; CHECK-NEXT: [[TMP42:%.*]] = and i1 false, [[TMP41]] +; CHECK-NEXT: [[TMP40:%.*]] = and i1 false, [[TMP41]] ; CHECK-NEXT: [[TMP43:%.*]] = extractelement <32 x i1> [[TMP20]], i32 20 -; CHECK-NEXT: [[TMP44:%.*]] = and i1 false, [[TMP43]] +; CHECK-NEXT: [[TMP42:%.*]] = and i1 false, [[TMP43]] ; CHECK-NEXT: [[TMP45:%.*]] = extractelement <32 x i1> [[TMP20]], i32 19 -; CHECK-NEXT: [[TMP46:%.*]] = and i1 false, [[TMP45]] +; CHECK-NEXT: [[TMP44:%.*]] = and i1 false, [[TMP45]] ; CHECK-NEXT: [[TMP47:%.*]] = extractelement <32 x i1> [[TMP20]], i32 18 -; CHECK-NEXT: [[TMP48:%.*]] = and i1 false, [[TMP47]] +; CHECK-NEXT: [[TMP46:%.*]] = and i1 false, [[TMP47]] ; CHECK-NEXT: [[TMP49:%.*]] = extractelement <32 x i1> [[TMP20]], i32 17 -; CHECK-NEXT: [[TMP50:%.*]] = and i1 false, [[TMP49]] +; CHECK-NEXT: [[TMP48:%.*]] = and i1 false, [[TMP49]] ; CHECK-NEXT: [[TMP51:%.*]] = extractelement <32 x i1> [[TMP20]], i32 16 -; CHECK-NEXT: [[TMP52:%.*]] = and i1 false, [[TMP51]] +; CHECK-NEXT: [[TMP50:%.*]] = and i1 false, [[TMP51]] ; CHECK-NEXT: [[TMP53:%.*]] = extractelement <32 x i1> [[TMP20]], i32 15 -; CHECK-NEXT: [[TMP54:%.*]] = and i1 false, [[TMP53]] +; CHECK-NEXT: [[TMP52:%.*]] = and i1 false, [[TMP53]] ; CHECK-NEXT: [[TMP55:%.*]] = extractelement <32 x i1> [[TMP20]], i32 14 -; CHECK-NEXT: [[TMP56:%.*]] = and i1 false, [[TMP55]] +; CHECK-NEXT: [[TMP54:%.*]] = and i1 false, [[TMP55]] ; CHECK-NEXT: [[TMP57:%.*]] = extractelement <32 x i1> [[TMP20]], i32 13 -; CHECK-NEXT: [[TMP58:%.*]] = and i1 false, [[TMP57]] +; CHECK-NEXT: [[TMP56:%.*]] = and i1 false, [[TMP57]] ; CHECK-NEXT: [[TMP59:%.*]] = extractelement <32 x i1> [[TMP20]], i32 12 -; CHECK-NEXT: [[TMP60:%.*]] = and i1 false, [[TMP59]] +; CHECK-NEXT: [[TMP58:%.*]] = and i1 false, [[TMP59]] ; CHECK-NEXT: [[TMP61:%.*]] = extractelement <32 x i1> [[TMP20]], i32 11 -; CHECK-NEXT: [[TMP62:%.*]] = and i1 false, [[TMP61]] +; CHECK-NEXT: [[TMP60:%.*]] = and i1 false, [[TMP61]] ; CHECK-NEXT: [[TMP63:%.*]] = extractelement <32 x i1> [[TMP20]], i32 10 -; CHECK-NEXT: [[TMP64:%.*]] = and i1 false, [[TMP63]] +; CHECK-NEXT: [[TMP62:%.*]] = and i1 false, [[TMP63]] ; CHECK-NEXT: [[TMP65:%.*]] = extractelement <32 x i1> [[TMP20]], i32 9 -; CHECK-NEXT: [[TMP66:%.*]] = and i1 false, [[TMP65]] +; CHECK-NEXT: [[TMP64:%.*]] = and i1 false, [[TMP65]] ; CHECK-NEXT: [[TMP67:%.*]] = extractelement <32 x i1> [[TMP20]], i32 8 -; CHECK-NEXT: [[TMP68:%.*]] = and i1 false, [[TMP67]] +; CHECK-NEXT: [[TMP66:%.*]] = and i1 false, [[TMP67]] ; CHECK-NEXT: [[TMP69:%.*]] = extractelement <32 x i1> [[TMP20]], i32 7 -; CHECK-NEXT: [[TMP70:%.*]] = and i1 false, [[TMP69]] +; CHECK-NEXT: [[TMP68:%.*]] = and i1 false, [[TMP69]] ; CHECK-NEXT: [[TMP71:%.*]] = extractelement <32 x i1> [[TMP20]], i32 6 -; CHECK-NEXT: [[TMP72:%.*]] = and i1 false, [[TMP71]] +; CHECK-NEXT: [[TMP70:%.*]] = and i1 false, [[TMP71]] ; CHECK-NEXT: [[TMP73:%.*]] = extractelement <32 x i1> [[TMP20]], i32 5 -; CHECK-NEXT: [[TMP74:%.*]] = and i1 false, [[TMP73]] +; CHECK-NEXT: [[TMP72:%.*]] = and i1 false, [[TMP73]] ; CHECK-NEXT: [[TMP75:%.*]] = extractelement <32 x i1> [[TMP20]], i32 4 -; CHECK-NEXT: [[TMP76:%.*]] = and i1 false, [[TMP75]] +; CHECK-NEXT: [[TMP74:%.*]] = and i1 false, [[TMP75]] ; CHECK-NEXT: [[TMP77:%.*]] = extractelement <32 x i32> [[TMP18]], i32 0 ; CHECK-NEXT: [[TMP78:%.*]] = zext i32 [[TMP77]] to i64 ; CHECK-NEXT: [[TMP79:%.*]] = getelementptr float, ptr addrspace(1) null, i64 [[TMP78]] diff --git a/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll b/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll index 732b50396a46..1e3255f2187a 100644 --- a/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll +++ b/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll @@ -12,9 +12,7 @@ define i32 @test() { ; CHECK-NEXT: br i1 false, label [[BB4:%.*]], label [[BB3]] ; CHECK: bb3: ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> , <2 x i32> -; CHECK-NEXT: [[TMP3:%.*]] = add <2 x i32> zeroinitializer, [[TMP2]] -; CHECK-NEXT: [[TMP4:%.*]] = or <2 x i32> zeroinitializer, [[TMP2]] -; CHECK-NEXT: [[TMP5]] = shufflevector <2 x i32> [[TMP3]], <2 x i32> [[TMP4]], <2 x i32> +; CHECK-NEXT: [[TMP5]] = or <2 x i32> zeroinitializer, [[TMP2]] ; CHECK-NEXT: br label [[BB1]] ; CHECK: bb4: ; CHECK-NEXT: [[TMP6:%.*]] = phi <8 x i32> [ [[TMP1]], [[BB1]] ] -- cgit v1.2.3 From 3133acf1fbd1cc57ea8e74288ee9a0acd027d749 Mon Sep 17 00:00:00 2001 From: Han-Kuan Chen Date: Thu, 12 Dec 2024 20:38:31 -0800 Subject: Revert "[SLP] Make getSameOpcode support different instructions if they have same semantics. (#112181)" This reverts commit 82204154b7bd1f8c487c94c7ef00399d776b29f0. --- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 242 +++------------------ .../Transforms/SLPVectorizer/AArch64/vec3-base.ll | 8 +- .../reversed-strided-node-with-external-ptr.ll | 17 +- .../Transforms/SLPVectorizer/RISCV/vec3-base.ll | 8 +- .../Transforms/SLPVectorizer/X86/barriercall.ll | 6 +- .../SLPVectorizer/X86/bottom-to-top-reorder.ll | 27 ++- .../SLPVectorizer/X86/extract-scalar-from-undef.ll | 36 +-- .../Transforms/SLPVectorizer/X86/extractcost.ll | 10 +- .../X86/minbitwidth-drop-wrapping-flags.ll | 4 +- .../X86/multi-extracts-bv-combined.ll | 4 +- .../test/Transforms/SLPVectorizer/X86/vec3-base.ll | 19 +- .../SLPVectorizer/alternate-opcode-sindle-bv.ll | 36 ++- .../resized-alt-shuffle-after-minbw.ll | 62 +++--- .../SLPVectorizer/shuffle-mask-resized.ll | 4 +- 14 files changed, 159 insertions(+), 324 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index f1391ae93c86..0e11e8704db2 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -842,123 +842,8 @@ public: static InstructionsState invalid() { return {nullptr, nullptr}; } }; -struct InterchangeableInstruction { - unsigned Opcode; - SmallVector Ops; - template - InterchangeableInstruction(unsigned Opcode, ArgTypes &&...Args) - : Opcode(Opcode), Ops{std::forward(Args)...} {} -}; - -bool operator<(const InterchangeableInstruction &LHS, - const InterchangeableInstruction &RHS) { - return LHS.Opcode < RHS.Opcode; -} - } // end anonymous namespace -/// \returns a sorted list of interchangeable instructions by instruction opcode -/// that \p I can be converted to. -/// e.g., -/// x << y -> x * (2^y) -/// x << 1 -> x * 2 -/// x << 0 -> x * 1 -> x - 0 -> x + 0 -> x & 11...1 -> x | 0 -/// x * 0 -> x & 0 -/// x * -1 -> 0 - x -/// TODO: support more patterns -static SmallVector -getInterchangeableInstruction(Instruction *I) { - // PII = Possible Interchangeable Instruction - SmallVector PII; - unsigned Opcode = I->getOpcode(); - PII.emplace_back(Opcode, I->operands()); - if (!is_contained({Instruction::Shl, Instruction::Mul, Instruction::Sub, - Instruction::Add}, - Opcode)) - return PII; - Constant *C; - if (match(I, m_BinOp(m_Value(), m_Constant(C)))) { - ConstantInt *V = nullptr; - if (auto *CI = dyn_cast(C)) { - V = CI; - } else if (auto *CDV = dyn_cast(C)) { - if (auto *CI = dyn_cast_if_present(CDV->getSplatValue())) - V = CI; - } - if (!V) - return PII; - Value *Op0 = I->getOperand(0); - Type *Op1Ty = I->getOperand(1)->getType(); - const APInt &Op1Int = V->getValue(); - Constant *Zero = - ConstantInt::get(Op1Ty, APInt::getZero(Op1Int.getBitWidth())); - Constant *UnsignedMax = - ConstantInt::get(Op1Ty, APInt::getMaxValue(Op1Int.getBitWidth())); - switch (Opcode) { - case Instruction::Shl: { - PII.emplace_back(Instruction::Mul, Op0, - ConstantInt::get(Op1Ty, 1 << Op1Int.getZExtValue())); - if (Op1Int.isZero()) { - PII.emplace_back(Instruction::Sub, Op0, Zero); - PII.emplace_back(Instruction::Add, Op0, Zero); - PII.emplace_back(Instruction::And, Op0, UnsignedMax); - PII.emplace_back(Instruction::Or, Op0, Zero); - } - break; - } - case Instruction::Mul: { - if (Op1Int.isOne()) { - PII.emplace_back(Instruction::Sub, Op0, Zero); - PII.emplace_back(Instruction::Add, Op0, Zero); - PII.emplace_back(Instruction::And, Op0, UnsignedMax); - PII.emplace_back(Instruction::Or, Op0, Zero); - } else if (Op1Int.isZero()) { - PII.emplace_back(Instruction::And, Op0, Zero); - } else if (Op1Int.isAllOnes()) { - PII.emplace_back(Instruction::Sub, Zero, Op0); - } - break; - } - case Instruction::Sub: - if (Op1Int.isZero()) { - PII.emplace_back(Instruction::Add, Op0, Zero); - PII.emplace_back(Instruction::And, Op0, UnsignedMax); - PII.emplace_back(Instruction::Or, Op0, Zero); - } - break; - case Instruction::Add: - if (Op1Int.isZero()) { - PII.emplace_back(Instruction::And, Op0, UnsignedMax); - PII.emplace_back(Instruction::Or, Op0, Zero); - } - break; - } - } - // std::set_intersection requires a sorted range. - sort(PII); - return PII; -} - -/// \returns the Op and operands which \p I convert to. -static std::pair> -getInterchangeableInstruction(Instruction *I, Instruction *MainOp, - Instruction *AltOp) { - SmallVector IIList = - getInterchangeableInstruction(I); - const auto *Iter = find_if(IIList, [&](const InterchangeableInstruction &II) { - return II.Opcode == MainOp->getOpcode(); - }); - if (Iter == IIList.end()) { - Iter = find_if(IIList, [&](const InterchangeableInstruction &II) { - return II.Opcode == AltOp->getOpcode(); - }); - assert(Iter != IIList.end() && - "Cannot find an interchangeable instruction."); - return std::make_pair(AltOp, Iter->Ops); - } - return std::make_pair(MainOp, Iter->Ops); -} - /// \returns true if \p Opcode is allowed as part of the main/alternate /// instruction for SLP vectorization. /// @@ -1072,22 +957,6 @@ static InstructionsState getSameOpcode(ArrayRef VL, return InstructionsState::invalid(); } bool AnyPoison = InstCnt != VL.size(); - // Currently, this is only used for binary ops. - // TODO: support all instructions - SmallVector InterchangeableOpcode = - getInterchangeableInstruction(cast(V)); - SmallVector AlternateInterchangeableOpcode; - auto UpdateInterchangeableOpcode = - [](SmallVector &LHS, - ArrayRef RHS) { - SmallVector NewInterchangeableOpcode; - std::set_intersection(LHS.begin(), LHS.end(), RHS.begin(), RHS.end(), - std::back_inserter(NewInterchangeableOpcode)); - if (NewInterchangeableOpcode.empty()) - return false; - LHS.swap(NewInterchangeableOpcode); - return true; - }; for (int Cnt = 0, E = VL.size(); Cnt < E; Cnt++) { auto *I = dyn_cast(VL[Cnt]); if (!I) @@ -1100,32 +969,14 @@ static InstructionsState getSameOpcode(ArrayRef VL, return InstructionsState::invalid(); unsigned InstOpcode = I->getOpcode(); if (IsBinOp && isa(I)) { - SmallVector ThisInterchangeableOpcode( - getInterchangeableInstruction(I)); - if (UpdateInterchangeableOpcode(InterchangeableOpcode, - ThisInterchangeableOpcode)) + if (InstOpcode == Opcode || InstOpcode == AltOpcode) continue; - if (AlternateInterchangeableOpcode.empty()) { - InterchangeableOpcode.erase( - remove_if(InterchangeableOpcode, - [](const InterchangeableInstruction &I) { - return !isValidForAlternation(I.Opcode); - }), - InterchangeableOpcode.end()); - ThisInterchangeableOpcode.erase( - remove_if(ThisInterchangeableOpcode, - [](const InterchangeableInstruction &I) { - return !isValidForAlternation(I.Opcode); - }), - ThisInterchangeableOpcode.end()); - if (InterchangeableOpcode.empty() || ThisInterchangeableOpcode.empty()) - return InstructionsState::invalid(); - AlternateInterchangeableOpcode.swap(ThisInterchangeableOpcode); + if (Opcode == AltOpcode && isValidForAlternation(InstOpcode) && + isValidForAlternation(Opcode)) { + AltOpcode = InstOpcode; + AltIndex = Cnt; continue; } - if (UpdateInterchangeableOpcode(AlternateInterchangeableOpcode, - ThisInterchangeableOpcode)) - continue; } else if (IsCastOp && isa(I)) { Value *Op0 = IBase->getOperand(0); Type *Ty0 = Op0->getType(); @@ -1226,24 +1077,6 @@ static InstructionsState getSameOpcode(ArrayRef VL, return InstructionsState::invalid(); } - if (IsBinOp) { - auto FindOp = [&](ArrayRef CandidateOp) { - for (Value *V : VL) { - if (isa(V)) - continue; - for (const InterchangeableInstruction &I : CandidateOp) - if (cast(V)->getOpcode() == I.Opcode) - return cast(V); - } - llvm_unreachable( - "Cannot find the candidate instruction for InstructionsState."); - }; - Instruction *MainOp = FindOp(InterchangeableOpcode); - Instruction *AltOp = AlternateInterchangeableOpcode.empty() - ? MainOp - : FindOp(AlternateInterchangeableOpcode); - return InstructionsState(MainOp, AltOp); - } return InstructionsState(cast(V), cast(VL[AltIndex])); } @@ -2574,46 +2407,42 @@ public: } /// Go through the instructions in VL and append their operands. - void appendOperandsOfVL(ArrayRef VL, Instruction *MainOp, - Instruction *AltOp) { + void appendOperandsOfVL(ArrayRef VL, Instruction *VL0) { assert(!VL.empty() && "Bad VL"); assert((empty() || VL.size() == getNumLanes()) && "Expected same number of lanes"); // IntrinsicInst::isCommutative returns true if swapping the first "two" // arguments to the intrinsic produces the same result. constexpr unsigned IntrinsicNumOperands = 2; - unsigned NumOperands = MainOp->getNumOperands(); - ArgSize = isa(MainOp) ? IntrinsicNumOperands : NumOperands; + unsigned NumOperands = VL0->getNumOperands(); + ArgSize = isa(VL0) ? IntrinsicNumOperands : NumOperands; OpsVec.resize(NumOperands); unsigned NumLanes = VL.size(); - for (unsigned OpIdx : seq(NumOperands)) + for (unsigned OpIdx = 0; OpIdx != NumOperands; ++OpIdx) { OpsVec[OpIdx].resize(NumLanes); - for (auto [Lane, V] : enumerate(VL)) { - assert((isa(V) || isa(V)) && - "Expected instruction or poison value"); - if (isa(V)) { - for (unsigned OpIdx : seq(NumOperands)) + for (unsigned Lane = 0; Lane != NumLanes; ++Lane) { + assert((isa(VL[Lane]) || isa(VL[Lane])) && + "Expected instruction or poison value"); + // Our tree has just 3 nodes: the root and two operands. + // It is therefore trivial to get the APO. We only need to check the + // opcode of VL[Lane] and whether the operand at OpIdx is the LHS or + // RHS operand. The LHS operand of both add and sub is never attached + // to an inversese operation in the linearized form, therefore its APO + // is false. The RHS is true only if VL[Lane] is an inverse operation. + + // Since operand reordering is performed on groups of commutative + // operations or alternating sequences (e.g., +, -), we can safely + // tell the inverse operations by checking commutativity. + if (isa(VL[Lane])) { OpsVec[OpIdx][Lane] = { - PoisonValue::get(MainOp->getOperand(OpIdx)->getType()), true, + PoisonValue::get(VL0->getOperand(OpIdx)->getType()), true, false}; - continue; - } - auto [SelectedOp, Ops] = - getInterchangeableInstruction(cast(V), MainOp, AltOp); - // Our tree has just 3 nodes: the root and two operands. - // It is therefore trivial to get the APO. We only need to check the - // opcode of V and whether the operand at OpIdx is the LHS or RHS - // operand. The LHS operand of both add and sub is never attached to an - // inversese operation in the linearized form, therefore its APO is - // false. The RHS is true only if V is an inverse operation. - - // Since operand reordering is performed on groups of commutative - // operations or alternating sequences (e.g., +, -), we can safely - // tell the inverse operations by checking commutativity. - bool IsInverseOperation = !isCommutative(cast(SelectedOp)); - for (unsigned OpIdx : seq(NumOperands)) { + continue; + } + bool IsInverseOperation = !isCommutative(cast(VL[Lane])); bool APO = (OpIdx == 0) ? false : IsInverseOperation; - OpsVec[OpIdx][Lane] = {Ops[OpIdx], APO, false}; + OpsVec[OpIdx][Lane] = {cast(VL[Lane])->getOperand(OpIdx), + APO, false}; } } } @@ -2720,12 +2549,11 @@ public: public: /// Initialize with all the operands of the instruction vector \p RootVL. - VLOperands(ArrayRef RootVL, Instruction *MainOp, - Instruction *AltOp, const BoUpSLP &R) + VLOperands(ArrayRef RootVL, Instruction *VL0, const BoUpSLP &R) : TLI(*R.TLI), DL(*R.DL), SE(*R.SE), R(R), - L(R.LI->getLoopFor(MainOp->getParent())) { + L(R.LI->getLoopFor((VL0->getParent()))) { // Append all the operands of RootVL. - appendOperandsOfVL(RootVL, MainOp, AltOp); + appendOperandsOfVL(RootVL, VL0); } /// \Returns a value vector with the operands across all lanes for the @@ -3517,7 +3345,7 @@ private: /// Set this bundle's operand from Scalars. void setOperand(const BoUpSLP &R, bool RequireReorder = false) { - VLOperands Ops(Scalars, MainOp, AltOp, R); + VLOperands Ops(Scalars, MainOp, R); if (RequireReorder) Ops.reorder(); for (unsigned I : seq(MainOp->getNumOperands())) @@ -8733,7 +8561,7 @@ void BoUpSLP::buildTree_rec(ArrayRef VL, unsigned Depth, LLVM_DEBUG(dbgs() << "SLP: added a vector of compares.\n"); ValueList Left, Right; - VLOperands Ops(VL, VL0, S.getAltOp(), *this); + VLOperands Ops(VL, VL0, *this); if (cast(VL0)->isCommutative()) { // Commutative predicate - collect + sort operands of the instructions // so that each side is more likely to have the same opcode. @@ -15791,7 +15619,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) { Value *V = Builder.CreateBinOp( static_cast(E->getOpcode()), LHS, RHS); - propagateIRFlags(V, E->Scalars, nullptr, It == MinBWs.end()); + propagateIRFlags(V, E->Scalars, VL0, It == MinBWs.end()); if (auto *I = dyn_cast(V)) { V = ::propagateMetadata(I, E->Scalars); // Drop nuw flags for abs(sub(commutative), true). diff --git a/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll b/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll index c65df26fa0d5..feb4ad865f31 100644 --- a/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll +++ b/llvm/test/Transforms/SLPVectorizer/AArch64/vec3-base.ll @@ -314,10 +314,10 @@ define void @store_try_reorder(ptr %dst) { ; ; POW2-ONLY-LABEL: @store_try_reorder( ; POW2-ONLY-NEXT: entry: -; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 -; POW2-ONLY-NEXT: [[ADD216:%.*]] = sub i32 0, 0 -; POW2-ONLY-NEXT: [[ARRAYIDX_I1891:%.*]] = getelementptr i32, ptr [[DST]], i64 2 -; POW2-ONLY-NEXT: store i32 [[ADD216]], ptr [[ARRAYIDX_I1891]], align 4 +; POW2-ONLY-NEXT: [[ADD:%.*]] = add i32 0, 0 +; POW2-ONLY-NEXT: store i32 [[ADD]], ptr [[DST:%.*]], align 4 +; POW2-ONLY-NEXT: [[ARRAYIDX_I1887:%.*]] = getelementptr i32, ptr [[DST]], i64 1 +; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[ARRAYIDX_I1887]], align 4 ; POW2-ONLY-NEXT: ret void ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll index 74d7f1c91f3b..fd3d4ab80b29 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/reversed-strided-node-with-external-ptr.ll @@ -7,18 +7,19 @@ define void @test(ptr %a, i64 %0) { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x ptr> poison, ptr [[A]], i32 0 ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x ptr> [[TMP1]], <2 x ptr> poison, <2 x i32> zeroinitializer -; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x i64> , i64 [[TMP0]], i32 0 ; CHECK-NEXT: br label %[[BB:.*]] ; CHECK: [[BB]]: -; CHECK-NEXT: [[TMP5:%.*]] = or disjoint <2 x i64> [[TMP3]], +; CHECK-NEXT: [[TMP3:%.*]] = or disjoint i64 [[TMP0]], 1 +; CHECK-NEXT: [[TMP4:%.*]] = insertelement <2 x i64> poison, i64 [[TMP3]], i32 0 +; CHECK-NEXT: [[TMP5:%.*]] = insertelement <2 x i64> [[TMP4]], i64 0, i32 1 ; CHECK-NEXT: [[TMP6:%.*]] = getelementptr double, <2 x ptr> [[TMP2]], <2 x i64> [[TMP5]] -; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x ptr> [[TMP6]], i32 0 -; CHECK-NEXT: [[TMP9:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[TMP6]], i32 8, <2 x i1> splat (i1 true), <2 x double> poison) -; CHECK-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr [[A]], align 8 -; CHECK-NEXT: [[TMP10:%.*]] = load <2 x double>, ptr [[A]], align 8 +; CHECK-NEXT: [[ARRAYIDX17_I28_1:%.*]] = getelementptr double, ptr [[A]], i64 [[TMP3]] +; CHECK-NEXT: [[TMP7:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[TMP6]], i32 8, <2 x i1> splat (i1 true), <2 x double> poison) +; CHECK-NEXT: [[TMP8:%.*]] = load <2 x double>, ptr [[A]], align 8 +; CHECK-NEXT: [[TMP9:%.*]] = load <2 x double>, ptr [[A]], align 8 +; CHECK-NEXT: [[TMP10:%.*]] = fsub <2 x double> [[TMP8]], [[TMP9]] ; CHECK-NEXT: [[TMP11:%.*]] = fsub <2 x double> [[TMP7]], [[TMP10]] -; CHECK-NEXT: [[TMP12:%.*]] = fsub <2 x double> [[TMP9]], [[TMP11]] -; CHECK-NEXT: call void @llvm.experimental.vp.strided.store.v2f64.p0.i64(<2 x double> [[TMP12]], ptr align 8 [[TMP8]], i64 -8, <2 x i1> splat (i1 true), i32 2) +; CHECK-NEXT: call void @llvm.experimental.vp.strided.store.v2f64.p0.i64(<2 x double> [[TMP11]], ptr align 8 [[ARRAYIDX17_I28_1]], i64 -8, <2 x i1> splat (i1 true), i32 2) ; CHECK-NEXT: br label %[[BB]] ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll index 89b87a3a45d1..7ab5e4d6cb78 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/vec3-base.ll @@ -324,10 +324,10 @@ define void @store_try_reorder(ptr %dst) { ; ; POW2-ONLY-LABEL: @store_try_reorder( ; POW2-ONLY-NEXT: entry: -; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 -; POW2-ONLY-NEXT: [[ADD216:%.*]] = sub i32 0, 0 -; POW2-ONLY-NEXT: [[ARRAYIDX_I1891:%.*]] = getelementptr i32, ptr [[DST]], i64 2 -; POW2-ONLY-NEXT: store i32 [[ADD216]], ptr [[ARRAYIDX_I1891]], align 4 +; POW2-ONLY-NEXT: [[ADD:%.*]] = add i32 0, 0 +; POW2-ONLY-NEXT: store i32 [[ADD]], ptr [[DST:%.*]], align 4 +; POW2-ONLY-NEXT: [[ARRAYIDX_I1887:%.*]] = getelementptr i32, ptr [[DST]], i64 1 +; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[ARRAYIDX_I1887]], align 4 ; POW2-ONLY-NEXT: ret void ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll b/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll index e3b4898e8521..f46a5d84a86c 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/barriercall.ll @@ -10,8 +10,10 @@ define i32 @foo(ptr nocapture %A, i32 %n) { ; CHECK-NEXT: [[CALL:%.*]] = tail call i32 (...) @bar() ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> poison, i32 [[N:%.*]], i32 0 ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <4 x i32> zeroinitializer -; CHECK-NEXT: [[TMP2:%.*]] = mul <4 x i32> [[SHUFFLE]], -; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> [[TMP2]], splat (i32 9) +; CHECK-NEXT: [[TMP1:%.*]] = mul nsw <4 x i32> [[SHUFFLE]], +; CHECK-NEXT: [[TMP2:%.*]] = shl <4 x i32> [[SHUFFLE]], +; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> +; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> [[TMP3]], splat (i32 9) ; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr [[A:%.*]], align 4 ; CHECK-NEXT: ret i32 undef ; diff --git a/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll b/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll index 7af0c64f1874..889f5a95c81d 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/bottom-to-top-reorder.ll @@ -4,17 +4,22 @@ define void @test(ptr %0, ptr %1, ptr %2) { ; CHECK-LABEL: @test( ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds i32, ptr [[TMP0:%.*]], i64 4 -; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i32>, ptr [[TMP1:%.*]], align 4 -; CHECK-NEXT: [[TMP6:%.*]] = load <4 x i32>, ptr [[TMP0]], align 4 -; CHECK-NEXT: [[TMP7:%.*]] = load <4 x i32>, ptr [[TMP4]], align 4 -; CHECK-NEXT: [[TMP8:%.*]] = sub <4 x i32> , [[TMP6]] -; CHECK-NEXT: [[TMP9:%.*]] = sub <4 x i32> [[TMP8]], [[TMP7]] -; CHECK-NEXT: [[TMP10:%.*]] = add <4 x i32> [[TMP9]], [[TMP5]] -; CHECK-NEXT: [[TMP11:%.*]] = add <4 x i32> , [[TMP10]] -; CHECK-NEXT: [[TMP12:%.*]] = add <4 x i32> [[TMP11]], zeroinitializer -; CHECK-NEXT: [[TMP13:%.*]] = add <4 x i32> [[TMP12]], zeroinitializer -; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <4 x i32> [[TMP13]], <4 x i32> poison, <4 x i32> -; CHECK-NEXT: store <4 x i32> [[TMP14]], ptr [[TMP2:%.*]], align 4 +; CHECK-NEXT: [[TMP6:%.*]] = load <4 x i32>, ptr [[TMP1:%.*]], align 4 +; CHECK-NEXT: [[TMP8:%.*]] = load <4 x i32>, ptr [[TMP0]], align 4 +; CHECK-NEXT: [[TMP10:%.*]] = load <4 x i32>, ptr [[TMP4]], align 4 +; CHECK-NEXT: [[TMP11:%.*]] = sub <4 x i32> , [[TMP8]] +; CHECK-NEXT: [[TMP12:%.*]] = sub <4 x i32> [[TMP11]], [[TMP10]] +; CHECK-NEXT: [[TMP13:%.*]] = add <4 x i32> [[TMP12]], [[TMP6]] +; CHECK-NEXT: [[TMP14:%.*]] = add <4 x i32> [[TMP13]], +; CHECK-NEXT: [[TMP15:%.*]] = sub <4 x i32> [[TMP13]], +; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <4 x i32> [[TMP14]], <4 x i32> [[TMP15]], <4 x i32> +; CHECK-NEXT: [[TMP17:%.*]] = add <4 x i32> [[TMP16]], zeroinitializer +; CHECK-NEXT: [[TMP18:%.*]] = sub <4 x i32> [[TMP16]], zeroinitializer +; CHECK-NEXT: [[TMP19:%.*]] = shufflevector <4 x i32> [[TMP17]], <4 x i32> [[TMP18]], <4 x i32> +; CHECK-NEXT: [[TMP20:%.*]] = add <4 x i32> [[TMP19]], zeroinitializer +; CHECK-NEXT: [[TMP21:%.*]] = sub <4 x i32> [[TMP19]], zeroinitializer +; CHECK-NEXT: [[TMP22:%.*]] = shufflevector <4 x i32> [[TMP20]], <4 x i32> [[TMP21]], <4 x i32> +; CHECK-NEXT: store <4 x i32> [[TMP22]], ptr [[TMP2:%.*]], align 4 ; CHECK-NEXT: ret void ; %4 = load i32, ptr %1, align 4 diff --git a/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll b/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll index d474a5f2ceca..c976525b6720 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/extract-scalar-from-undef.ll @@ -4,17 +4,21 @@ define i64 @foo(i32 %tmp7) { ; CHECK-LABEL: @foo( ; CHECK-NEXT: bb: -; CHECK-NEXT: [[TMP0:%.*]] = insertelement <8 x i32> , i32 [[TMP7:%.*]], i32 3 -; CHECK-NEXT: [[TMP1:%.*]] = sub <8 x i32> [[TMP0]], -; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <8 x i32> , <8 x i32> [[TMP1]], <8 x i32> -; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x i32> [[TMP2]], i32 0, i32 5 -; CHECK-NEXT: [[TMP4:%.*]] = add nsw <8 x i32> [[TMP3]], [[TMP1]] -; CHECK-NEXT: [[TMP5:%.*]] = sub nsw <8 x i32> [[TMP3]], [[TMP1]] -; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <8 x i32> [[TMP4]], <8 x i32> [[TMP5]], <8 x i32> -; CHECK-NEXT: [[TMP7:%.*]] = add <8 x i32> zeroinitializer, [[TMP6]] -; CHECK-NEXT: [[TMP8:%.*]] = xor <8 x i32> [[TMP7]], zeroinitializer -; CHECK-NEXT: [[TMP9:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> [[TMP8]]) -; CHECK-NEXT: [[OP_RDX:%.*]] = add i32 [[TMP9]], 0 +; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> , i32 [[TMP5:%.*]], i32 2 +; CHECK-NEXT: [[TMP3:%.*]] = sub <4 x i32> [[TMP2]], zeroinitializer +; CHECK-NEXT: [[TMP24:%.*]] = sub i32 undef, 0 +; CHECK-NEXT: [[TMP0:%.*]] = insertelement <8 x i32> , i32 [[TMP24]], i32 4 +; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x i32> [[TMP0]], i32 0, i32 5 +; CHECK-NEXT: [[TMP11:%.*]] = insertelement <8 x i32> , i32 [[TMP24]], i32 6 +; CHECK-NEXT: [[TMP12:%.*]] = call <8 x i32> @llvm.vector.insert.v8i32.v4i32(<8 x i32> poison, <4 x i32> [[TMP3]], i64 0) +; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <8 x i32> [[TMP12]], <8 x i32> [[TMP11]], <8 x i32> +; CHECK-NEXT: [[TMP5:%.*]] = add nsw <8 x i32> [[TMP1]], [[TMP4]] +; CHECK-NEXT: [[TMP6:%.*]] = sub nsw <8 x i32> [[TMP1]], [[TMP4]] +; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <8 x i32> [[TMP5]], <8 x i32> [[TMP6]], <8 x i32> +; CHECK-NEXT: [[TMP8:%.*]] = add <8 x i32> zeroinitializer, [[TMP7]] +; CHECK-NEXT: [[TMP9:%.*]] = xor <8 x i32> [[TMP8]], zeroinitializer +; CHECK-NEXT: [[TMP10:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> [[TMP9]]) +; CHECK-NEXT: [[OP_RDX:%.*]] = add i32 [[TMP10]], 0 ; CHECK-NEXT: [[TMP64:%.*]] = zext i32 [[OP_RDX]] to i64 ; CHECK-NEXT: ret i64 [[TMP64]] ; @@ -25,7 +29,7 @@ bb: %tmp4 = xor i32 %tmp3, 0 %tmp6 = sub i32 0, 0 %tmp8 = sub i32 %tmp7, 0 - %tmp9 = sub nsw i32 0, poison + %tmp9 = sub nsw i32 0, undef %tmp10 = add nsw i32 0, %tmp6 %tmp11 = sub nsw i32 0, %tmp8 %tmp12 = add i32 0, %tmp10 @@ -40,10 +44,10 @@ bb: %tmp21 = add i32 %tmp20, %tmp17 %tmp22 = sub i32 0, 0 %tmp23 = add i32 0, 0 - %tmp24 = sub i32 poison, 0 - %tmp25 = add nsw i32 %tmp23, poison + %tmp24 = sub i32 undef, 0 + %tmp25 = add nsw i32 %tmp23, undef %tmp26 = add nsw i32 %tmp24, %tmp22 - %tmp27 = sub nsw i32 poison, %tmp24 + %tmp27 = sub nsw i32 undef, %tmp24 %tmp28 = add i32 0, %tmp25 %tmp29 = xor i32 %tmp28, 0 %tmp30 = add i32 0, %tmp26 @@ -54,7 +58,7 @@ bb: %tmp35 = add i32 %tmp34, %tmp29 %tmp36 = add i32 %tmp35, 0 %tmp37 = add i32 %tmp36, %tmp33 - %tmp38 = sub nsw i32 0, poison + %tmp38 = sub nsw i32 0, undef %tmp39 = add i32 0, %tmp38 %tmp40 = xor i32 %tmp39, 0 %tmp41 = add i32 0, %tmp37 diff --git a/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll b/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll index fc62b0b38fd5..02c3173adc65 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/extractcost.ll @@ -9,10 +9,12 @@ define i32 @foo(ptr nocapture %A, i32 %n, i32 %m) { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> poison, i32 [[N:%.*]], i32 0 ; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <4 x i32> zeroinitializer -; CHECK-NEXT: [[TMP2:%.*]] = mul <4 x i32> [[SHUFFLE]], -; CHECK-NEXT: [[TMP3:%.*]] = add nsw <4 x i32> [[TMP2]], splat (i32 9) -; CHECK-NEXT: store <4 x i32> [[TMP3]], ptr [[A:%.*]], align 4 -; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i32> [[TMP3]], i32 0 +; CHECK-NEXT: [[TMP1:%.*]] = mul nsw <4 x i32> [[SHUFFLE]], +; CHECK-NEXT: [[TMP2:%.*]] = shl <4 x i32> [[SHUFFLE]], +; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> +; CHECK-NEXT: [[TMP4:%.*]] = add nsw <4 x i32> [[TMP3]], splat (i32 9) +; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr [[A:%.*]], align 4 +; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i32> [[TMP4]], i32 0 ; CHECK-NEXT: [[EXTERNALUSE1:%.*]] = add nsw i32 [[TMP6]], [[M:%.*]] ; CHECK-NEXT: [[EXTERNALUSE2:%.*]] = mul nsw i32 [[TMP6]], [[M]] ; CHECK-NEXT: [[ADD10:%.*]] = add nsw i32 [[EXTERNALUSE1]], [[EXTERNALUSE2]] diff --git a/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll b/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll index daab4b6ea4c9..2a5bfa739077 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/minbitwidth-drop-wrapping-flags.ll @@ -8,8 +8,10 @@ define i32 @test() { ; CHECK-NEXT: [[TMP10:%.*]] = or i8 [[A_PROMOTED]], 0 ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i8> poison, i8 [[A_PROMOTED]], i32 0 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i8> [[TMP0]], <4 x i8> poison, <4 x i32> zeroinitializer +; CHECK-NEXT: [[TMP2:%.*]] = add <4 x i8> [[TMP1]], zeroinitializer ; CHECK-NEXT: [[TMP3:%.*]] = or <4 x i8> [[TMP1]], zeroinitializer -; CHECK-NEXT: [[TMP5:%.*]] = zext <4 x i8> [[TMP3]] to <4 x i16> +; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> [[TMP3]], <4 x i32> +; CHECK-NEXT: [[TMP5:%.*]] = zext <4 x i8> [[TMP4]] to <4 x i16> ; CHECK-NEXT: [[TMP6:%.*]] = add <4 x i16> [[TMP5]], ; CHECK-NEXT: [[TMP7:%.*]] = call i16 @llvm.vector.reduce.or.v4i16(<4 x i16> [[TMP6]]) ; CHECK-NEXT: [[TMP8:%.*]] = zext i16 [[TMP7]] to i32 diff --git a/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll b/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll index 94f2c79faa8c..e6a166c27ac4 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/multi-extracts-bv-combined.ll @@ -9,7 +9,9 @@ define i32 @foo() { ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> , i32 [[D]], i32 1 ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <8 x i32> ; CHECK-NEXT: [[TMP2:%.*]] = or <8 x i32> zeroinitializer, [[TMP1]] -; CHECK-NEXT: store <8 x i32> [[TMP2]], ptr getelementptr inbounds ([64 x i32], ptr null, i64 0, i64 15), align 4 +; CHECK-NEXT: [[TMP3:%.*]] = add <8 x i32> zeroinitializer, [[TMP1]] +; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> [[TMP3]], <8 x i32> +; CHECK-NEXT: store <8 x i32> [[TMP4]], ptr getelementptr inbounds ([64 x i32], ptr null, i64 0, i64 15), align 4 ; CHECK-NEXT: ret i32 0 ; entry: diff --git a/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll b/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll index 15dd6756cd7d..6e2a43ac5f9f 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/vec3-base.ll @@ -242,18 +242,13 @@ exit: } define void @store_try_reorder(ptr %dst) { -; NON-POW2-LABEL: @store_try_reorder( -; NON-POW2-NEXT: entry: -; NON-POW2-NEXT: store <3 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 -; NON-POW2-NEXT: ret void -; -; POW2-ONLY-LABEL: @store_try_reorder( -; POW2-ONLY-NEXT: entry: -; POW2-ONLY-NEXT: store <2 x i32> zeroinitializer, ptr [[DST:%.*]], align 4 -; POW2-ONLY-NEXT: [[ADD216:%.*]] = sub i32 0, 0 -; POW2-ONLY-NEXT: [[ARRAYIDX_I1891:%.*]] = getelementptr i32, ptr [[DST]], i64 2 -; POW2-ONLY-NEXT: store i32 [[ADD216]], ptr [[ARRAYIDX_I1891]], align 4 -; POW2-ONLY-NEXT: ret void +; CHECK-LABEL: @store_try_reorder( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[ADD:%.*]] = add i32 0, 0 +; CHECK-NEXT: store i32 [[ADD]], ptr [[DST:%.*]], align 4 +; CHECK-NEXT: [[ARRAYIDX_I1887:%.*]] = getelementptr i32, ptr [[DST]], i64 1 +; CHECK-NEXT: store <2 x i32> zeroinitializer, ptr [[ARRAYIDX_I1887]], align 4 +; CHECK-NEXT: ret void ; entry: %add = add i32 0, 0 diff --git a/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll b/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll index e4eff0f72b35..c25002951959 100644 --- a/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll +++ b/llvm/test/Transforms/SLPVectorizer/alternate-opcode-sindle-bv.ll @@ -1,29 +1,18 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 -; RUN: %if x86-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=X86 %} -; RUN: %if aarch64-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=AARCH64 %} +; RUN: %if x86-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s %} +; RUN: %if aarch64-registered-target %{ opt -S --passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s %} define <2 x i32> @test(i32 %arg) { -; X86-LABEL: define <2 x i32> @test( -; X86-SAME: i32 [[ARG:%.*]]) { -; X86-NEXT: bb: -; X86-NEXT: [[OR:%.*]] = or i32 [[ARG]], 0 -; X86-NEXT: [[MUL:%.*]] = mul i32 0, 1 -; X86-NEXT: [[MUL1:%.*]] = mul i32 [[OR]], [[MUL]] -; X86-NEXT: [[CMP:%.*]] = icmp ugt i32 0, [[MUL1]] -; X86-NEXT: [[TMP0:%.*]] = insertelement <2 x i32> poison, i32 [[OR]], i32 0 -; X86-NEXT: [[TMP1:%.*]] = insertelement <2 x i32> [[TMP0]], i32 [[MUL]], i32 1 -; X86-NEXT: ret <2 x i32> [[TMP1]] -; -; AARCH64-LABEL: define <2 x i32> @test( -; AARCH64-SAME: i32 [[ARG:%.*]]) { -; AARCH64-NEXT: bb: -; AARCH64-NEXT: [[TMP0:%.*]] = insertelement <2 x i32> , i32 [[ARG]], i32 0 -; AARCH64-NEXT: [[TMP1:%.*]] = or <2 x i32> [[TMP0]], zeroinitializer -; AARCH64-NEXT: [[TMP2:%.*]] = extractelement <2 x i32> [[TMP1]], i32 0 -; AARCH64-NEXT: [[TMP3:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1 -; AARCH64-NEXT: [[MUL1:%.*]] = mul i32 [[TMP2]], [[TMP3]] -; AARCH64-NEXT: [[CMP:%.*]] = icmp ugt i32 0, [[MUL1]] -; AARCH64-NEXT: ret <2 x i32> [[TMP1]] +; CHECK-LABEL: define <2 x i32> @test( +; CHECK-SAME: i32 [[ARG:%.*]]) { +; CHECK-NEXT: bb: +; CHECK-NEXT: [[OR:%.*]] = or i32 [[ARG]], 0 +; CHECK-NEXT: [[MUL:%.*]] = mul i32 0, 1 +; CHECK-NEXT: [[MUL1:%.*]] = mul i32 [[OR]], [[MUL]] +; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 0, [[MUL1]] +; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i32> poison, i32 [[OR]], i32 0 +; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i32> [[TMP0]], i32 [[MUL]], i32 1 +; CHECK-NEXT: ret <2 x i32> [[TMP1]] ; bb: %or = or i32 %arg, 0 @@ -34,3 +23,4 @@ bb: %1 = insertelement <2 x i32> %0, i32 %mul, i32 1 ret <2 x i32> %1 } + diff --git a/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll b/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll index 6f9768af38ca..61a84a67c9ff 100644 --- a/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll +++ b/llvm/test/Transforms/SLPVectorizer/resized-alt-shuffle-after-minbw.ll @@ -5,13 +5,15 @@ define void @func(i32 %0) { ; CHECK-LABEL: define void @func( ; CHECK-SAME: i32 [[TMP0:%.*]]) { ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> , i32 [[TMP0]], i32 1 +; CHECK-NEXT: [[TMP3:%.*]] = shl <4 x i32> [[TMP2]], zeroinitializer ; CHECK-NEXT: [[TMP4:%.*]] = or <4 x i32> [[TMP2]], zeroinitializer +; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> ; CHECK-NEXT: [[TMP6:%.*]] = shl i32 [[TMP0]], 0 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 -; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <32 x i32> +; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <32 x i32> ; CHECK-NEXT: [[TMP9:%.*]] = sext i32 [[TMP6]] to i64 ; CHECK-NEXT: [[TMP10:%.*]] = or i64 [[TMP9]], 0 -; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <32 x i32> +; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <32 x i32> ; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <32 x i32> [[TMP11]], <32 x i32> , <32 x i32> ; CHECK-NEXT: [[TMP13:%.*]] = insertelement <32 x i32> [[TMP12]], i32 0, i32 0 ; CHECK-NEXT: [[TMP14:%.*]] = call <32 x i32> @llvm.vector.insert.v32i32.v8i32(<32 x i32> [[TMP13]], <8 x i32> zeroinitializer, i64 16) @@ -22,61 +24,61 @@ define void @func(i32 %0) { ; CHECK-NEXT: [[TMP19:%.*]] = sext <32 x i32> [[TMP18]] to <32 x i64> ; CHECK-NEXT: [[TMP20:%.*]] = icmp slt <32 x i64> [[TMP19]], zeroinitializer ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <32 x i1> [[TMP20]], i32 31 -; CHECK-NEXT: [[TMP76:%.*]] = and i1 false, [[TMP21]] +; CHECK-NEXT: [[TMP22:%.*]] = and i1 false, [[TMP21]] ; CHECK-NEXT: [[TMP23:%.*]] = extractelement <32 x i1> [[TMP20]], i32 30 -; CHECK-NEXT: [[TMP22:%.*]] = and i1 false, [[TMP23]] +; CHECK-NEXT: [[TMP24:%.*]] = and i1 false, [[TMP23]] ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <32 x i1> [[TMP20]], i32 29 -; CHECK-NEXT: [[TMP24:%.*]] = and i1 false, [[TMP25]] +; CHECK-NEXT: [[TMP26:%.*]] = and i1 false, [[TMP25]] ; CHECK-NEXT: [[TMP27:%.*]] = extractelement <32 x i1> [[TMP20]], i32 28 -; CHECK-NEXT: [[TMP26:%.*]] = and i1 false, [[TMP27]] +; CHECK-NEXT: [[TMP28:%.*]] = and i1 false, [[TMP27]] ; CHECK-NEXT: [[TMP29:%.*]] = extractelement <32 x i1> [[TMP20]], i32 27 -; CHECK-NEXT: [[TMP28:%.*]] = and i1 false, [[TMP29]] +; CHECK-NEXT: [[TMP30:%.*]] = and i1 false, [[TMP29]] ; CHECK-NEXT: [[TMP31:%.*]] = extractelement <32 x i1> [[TMP20]], i32 26 -; CHECK-NEXT: [[TMP30:%.*]] = and i1 false, [[TMP31]] +; CHECK-NEXT: [[TMP32:%.*]] = and i1 false, [[TMP31]] ; CHECK-NEXT: [[TMP33:%.*]] = extractelement <32 x i1> [[TMP20]], i32 25 -; CHECK-NEXT: [[TMP32:%.*]] = and i1 false, [[TMP33]] +; CHECK-NEXT: [[TMP34:%.*]] = and i1 false, [[TMP33]] ; CHECK-NEXT: [[TMP35:%.*]] = extractelement <32 x i1> [[TMP20]], i32 24 -; CHECK-NEXT: [[TMP34:%.*]] = and i1 false, [[TMP35]] +; CHECK-NEXT: [[TMP36:%.*]] = and i1 false, [[TMP35]] ; CHECK-NEXT: [[TMP37:%.*]] = extractelement <32 x i1> [[TMP20]], i32 23 -; CHECK-NEXT: [[TMP36:%.*]] = and i1 false, [[TMP37]] +; CHECK-NEXT: [[TMP38:%.*]] = and i1 false, [[TMP37]] ; CHECK-NEXT: [[TMP39:%.*]] = extractelement <32 x i1> [[TMP20]], i32 22 -; CHECK-NEXT: [[TMP38:%.*]] = and i1 false, [[TMP39]] +; CHECK-NEXT: [[TMP40:%.*]] = and i1 false, [[TMP39]] ; CHECK-NEXT: [[TMP41:%.*]] = extractelement <32 x i1> [[TMP20]], i32 21 -; CHECK-NEXT: [[TMP40:%.*]] = and i1 false, [[TMP41]] +; CHECK-NEXT: [[TMP42:%.*]] = and i1 false, [[TMP41]] ; CHECK-NEXT: [[TMP43:%.*]] = extractelement <32 x i1> [[TMP20]], i32 20 -; CHECK-NEXT: [[TMP42:%.*]] = and i1 false, [[TMP43]] +; CHECK-NEXT: [[TMP44:%.*]] = and i1 false, [[TMP43]] ; CHECK-NEXT: [[TMP45:%.*]] = extractelement <32 x i1> [[TMP20]], i32 19 -; CHECK-NEXT: [[TMP44:%.*]] = and i1 false, [[TMP45]] +; CHECK-NEXT: [[TMP46:%.*]] = and i1 false, [[TMP45]] ; CHECK-NEXT: [[TMP47:%.*]] = extractelement <32 x i1> [[TMP20]], i32 18 -; CHECK-NEXT: [[TMP46:%.*]] = and i1 false, [[TMP47]] +; CHECK-NEXT: [[TMP48:%.*]] = and i1 false, [[TMP47]] ; CHECK-NEXT: [[TMP49:%.*]] = extractelement <32 x i1> [[TMP20]], i32 17 -; CHECK-NEXT: [[TMP48:%.*]] = and i1 false, [[TMP49]] +; CHECK-NEXT: [[TMP50:%.*]] = and i1 false, [[TMP49]] ; CHECK-NEXT: [[TMP51:%.*]] = extractelement <32 x i1> [[TMP20]], i32 16 -; CHECK-NEXT: [[TMP50:%.*]] = and i1 false, [[TMP51]] +; CHECK-NEXT: [[TMP52:%.*]] = and i1 false, [[TMP51]] ; CHECK-NEXT: [[TMP53:%.*]] = extractelement <32 x i1> [[TMP20]], i32 15 -; CHECK-NEXT: [[TMP52:%.*]] = and i1 false, [[TMP53]] +; CHECK-NEXT: [[TMP54:%.*]] = and i1 false, [[TMP53]] ; CHECK-NEXT: [[TMP55:%.*]] = extractelement <32 x i1> [[TMP20]], i32 14 -; CHECK-NEXT: [[TMP54:%.*]] = and i1 false, [[TMP55]] +; CHECK-NEXT: [[TMP56:%.*]] = and i1 false, [[TMP55]] ; CHECK-NEXT: [[TMP57:%.*]] = extractelement <32 x i1> [[TMP20]], i32 13 -; CHECK-NEXT: [[TMP56:%.*]] = and i1 false, [[TMP57]] +; CHECK-NEXT: [[TMP58:%.*]] = and i1 false, [[TMP57]] ; CHECK-NEXT: [[TMP59:%.*]] = extractelement <32 x i1> [[TMP20]], i32 12 -; CHECK-NEXT: [[TMP58:%.*]] = and i1 false, [[TMP59]] +; CHECK-NEXT: [[TMP60:%.*]] = and i1 false, [[TMP59]] ; CHECK-NEXT: [[TMP61:%.*]] = extractelement <32 x i1> [[TMP20]], i32 11 -; CHECK-NEXT: [[TMP60:%.*]] = and i1 false, [[TMP61]] +; CHECK-NEXT: [[TMP62:%.*]] = and i1 false, [[TMP61]] ; CHECK-NEXT: [[TMP63:%.*]] = extractelement <32 x i1> [[TMP20]], i32 10 -; CHECK-NEXT: [[TMP62:%.*]] = and i1 false, [[TMP63]] +; CHECK-NEXT: [[TMP64:%.*]] = and i1 false, [[TMP63]] ; CHECK-NEXT: [[TMP65:%.*]] = extractelement <32 x i1> [[TMP20]], i32 9 -; CHECK-NEXT: [[TMP64:%.*]] = and i1 false, [[TMP65]] +; CHECK-NEXT: [[TMP66:%.*]] = and i1 false, [[TMP65]] ; CHECK-NEXT: [[TMP67:%.*]] = extractelement <32 x i1> [[TMP20]], i32 8 -; CHECK-NEXT: [[TMP66:%.*]] = and i1 false, [[TMP67]] +; CHECK-NEXT: [[TMP68:%.*]] = and i1 false, [[TMP67]] ; CHECK-NEXT: [[TMP69:%.*]] = extractelement <32 x i1> [[TMP20]], i32 7 -; CHECK-NEXT: [[TMP68:%.*]] = and i1 false, [[TMP69]] +; CHECK-NEXT: [[TMP70:%.*]] = and i1 false, [[TMP69]] ; CHECK-NEXT: [[TMP71:%.*]] = extractelement <32 x i1> [[TMP20]], i32 6 -; CHECK-NEXT: [[TMP70:%.*]] = and i1 false, [[TMP71]] +; CHECK-NEXT: [[TMP72:%.*]] = and i1 false, [[TMP71]] ; CHECK-NEXT: [[TMP73:%.*]] = extractelement <32 x i1> [[TMP20]], i32 5 -; CHECK-NEXT: [[TMP72:%.*]] = and i1 false, [[TMP73]] +; CHECK-NEXT: [[TMP74:%.*]] = and i1 false, [[TMP73]] ; CHECK-NEXT: [[TMP75:%.*]] = extractelement <32 x i1> [[TMP20]], i32 4 -; CHECK-NEXT: [[TMP74:%.*]] = and i1 false, [[TMP75]] +; CHECK-NEXT: [[TMP76:%.*]] = and i1 false, [[TMP75]] ; CHECK-NEXT: [[TMP77:%.*]] = extractelement <32 x i32> [[TMP18]], i32 0 ; CHECK-NEXT: [[TMP78:%.*]] = zext i32 [[TMP77]] to i64 ; CHECK-NEXT: [[TMP79:%.*]] = getelementptr float, ptr addrspace(1) null, i64 [[TMP78]] diff --git a/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll b/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll index 1e3255f2187a..732b50396a46 100644 --- a/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll +++ b/llvm/test/Transforms/SLPVectorizer/shuffle-mask-resized.ll @@ -12,7 +12,9 @@ define i32 @test() { ; CHECK-NEXT: br i1 false, label [[BB4:%.*]], label [[BB3]] ; CHECK: bb3: ; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> , <2 x i32> -; CHECK-NEXT: [[TMP5]] = or <2 x i32> zeroinitializer, [[TMP2]] +; CHECK-NEXT: [[TMP3:%.*]] = add <2 x i32> zeroinitializer, [[TMP2]] +; CHECK-NEXT: [[TMP4:%.*]] = or <2 x i32> zeroinitializer, [[TMP2]] +; CHECK-NEXT: [[TMP5]] = shufflevector <2 x i32> [[TMP3]], <2 x i32> [[TMP4]], <2 x i32> ; CHECK-NEXT: br label [[BB1]] ; CHECK: bb4: ; CHECK-NEXT: [[TMP6:%.*]] = phi <8 x i32> [ [[TMP1]], [[BB1]] ] -- cgit v1.2.3 From 60325abeb3226b17c28429dfa6e175f25c171ec0 Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Fri, 13 Dec 2024 04:46:45 +0000 Subject: [MLGO] Add Threshold to Prevent Pathological Compile Time Cases (#119807) This patch adds a threshold flag, -mlregalloc-max-cascade, to prevent live ranges from being evicted more than is necessary. After deploying a new regalloc model, we ran into some pathological cases where the model decided it wanted to ping-pong evictions, taking up a large amount of compile time. This threshold is mostly a stop gap while we continue to investigate other solutions and work on minimizing/constructing test cases. --- llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp b/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp index 67ce0a69d849..23ab021c0994 100644 --- a/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp +++ b/llvm/lib/CodeGen/MLRegAllocEvictAdvisor.cpp @@ -63,6 +63,12 @@ static cl::opt InteractiveChannelBaseName( "outgoing name should be " ".out")); +static cl::opt + MaxCascade("mlregalloc-max-cascade", cl::Hidden, + cl::desc("The maximum number of times a live range can be " + "evicted before preventing it from being evicted"), + cl::init(20)); + // Options that only make sense in development mode #ifdef LLVM_HAVE_TFLITE #include "RegAllocScore.h" @@ -643,8 +649,16 @@ bool MLEvictAdvisor::loadInterferenceFeatures( RegClassInfo.getNumAllocatableRegs(MRI->getRegClass(VirtReg.reg())) < RegClassInfo.getNumAllocatableRegs( MRI->getRegClass(Intf->reg()))); - // Only evict older cascades or live ranges without a cascade. + unsigned IntfCascade = RA.getExtraInfo().getCascade(Intf->reg()); + // There is a potential that the model could be adversarial and + // continually evict live ranges over and over again, leading to a + // large amount of compile time being spent in regalloc. If we hit the + // threshold, prevent the range from being evicted. + if (IntfCascade >= MaxCascade) + return false; + + // Only evict older cascades or live ranges without a cascade. if (Cascade <= IntfCascade) { if (!Urgent) return false; -- cgit v1.2.3 From 0c94915d34e6934c04140bb908364e54d1bc8ada Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 12 Dec 2024 21:11:01 -0800 Subject: [RISCV] Use _B* suffix for vector mask logic pseudo instructions. (#119787) Replace LMUL suffixes with _B1, _B2, etc. This matches what we do for other mask only instructions like VCPOP_M, VFIRST_M, VMSBF_M, VLM, VSM, etc. Now all pseudoinstructions that use Log2SEW=0 will be consistently named. --- llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp | 16 ++++----- llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td | 11 +++--- llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td | 18 +++++----- llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td | 20 +++++------ llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir | 40 +++++++++++----------- .../CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir | 4 +-- 6 files changed, 54 insertions(+), 55 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp index 7ae68ebadd3e..f43c120dc194 100644 --- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp @@ -1670,7 +1670,7 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) { : RISCV::PseudoVMSLT_VX_##suffix; \ VMSGTOpcode = IsUnsigned ? RISCV::PseudoVMSGTU_VX_##suffix \ : RISCV::PseudoVMSGT_VX_##suffix; \ - VMNANDOpcode = RISCV::PseudoVMNAND_MM_##suffix; \ + VMNANDOpcode = RISCV::PseudoVMNAND_MM_##suffix_b; \ VMSetOpcode = RISCV::PseudoVMSET_M_##suffix_b; \ break; CASE_VMSLT_VMNAND_VMSET_OPCODES(LMUL_F8, MF8, B64) @@ -1770,13 +1770,13 @@ void RISCVDAGToDAGISel::Select(SDNode *Node) { VMANDNOpcode = RISCV::PseudoVMANDN_MM_##suffix; \ VMOROpcode = RISCV::PseudoVMOR_MM_##suffix; \ break; - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_F8, MF8) - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_F4, MF4) - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_F2, MF2) - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_1, M1) - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_2, M2) - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_4, M4) - CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_8, M8) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_F8, B64) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_F4, B32) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_F2, B16) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_1, B8) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_2, B4) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_4, B2) + CASE_VMXOR_VMANDN_VMOR_OPCODES(LMUL_8, B1) #undef CASE_VMXOR_VMANDN_VMOR_OPCODES } SDValue SEW = CurDAG->getTargetConstant( diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index 4e25d683faee..81b93ade9257 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -2273,11 +2273,10 @@ multiclass VPseudoBinaryV_VI_RM { - foreach m = MxList in { - defvar mx = m.MX; - let VLMul = m.value, isCommutable = Commutable in { - def "_MM_" # mx : VPseudoBinaryNoMask, - SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mx>; + foreach mti = AllMasks in { + let VLMul = mti.LMul.value, isCommutable = Commutable in { + def "_MM_" # mti.BX : VPseudoBinaryNoMask, + SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mti.LMul.MX>; } } } @@ -4950,7 +4949,7 @@ multiclass VPatBinaryV_VI_RM { foreach mti = AllMasks in let Predicates = [HasVInstructions] in - def : VPatBinaryM; } diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td index 021c4b3b724b..880ea0ae0a97 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td @@ -1141,35 +1141,35 @@ defm : VPatAVGADD_VV_VX_RM; foreach mti = AllMasks in { let Predicates = [HasVInstructions] in { def : Pat<(mti.Mask (and VR:$rs1, VR:$rs2)), - (!cast("PseudoVMAND_MM_"#mti.LMul.MX) + (!cast("PseudoVMAND_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (or VR:$rs1, VR:$rs2)), - (!cast("PseudoVMOR_MM_"#mti.LMul.MX) + (!cast("PseudoVMOR_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (xor VR:$rs1, VR:$rs2)), - (!cast("PseudoVMXOR_MM_"#mti.LMul.MX) + (!cast("PseudoVMXOR_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (rvv_vnot (and VR:$rs1, VR:$rs2))), - (!cast("PseudoVMNAND_MM_"#mti.LMul.MX) + (!cast("PseudoVMNAND_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (rvv_vnot (or VR:$rs1, VR:$rs2))), - (!cast("PseudoVMNOR_MM_"#mti.LMul.MX) + (!cast("PseudoVMNOR_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (rvv_vnot (xor VR:$rs1, VR:$rs2))), - (!cast("PseudoVMXNOR_MM_"#mti.LMul.MX) + (!cast("PseudoVMXNOR_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (and VR:$rs1, (rvv_vnot VR:$rs2))), - (!cast("PseudoVMANDN_MM_"#mti.LMul.MX) + (!cast("PseudoVMANDN_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; def : Pat<(mti.Mask (or VR:$rs1, (rvv_vnot VR:$rs2))), - (!cast("PseudoVMORN_MM_"#mti.LMul.MX) + (!cast("PseudoVMORN_MM_"#mti.BX) VR:$rs1, VR:$rs2, mti.AVL, mti.Log2SEW)>; // Handle rvv_vnot the same as the vmnot.m pseudoinstruction. def : Pat<(mti.Mask (rvv_vnot VR:$rs)), - (!cast("PseudoVMNAND_MM_"#mti.LMul.MX) + (!cast("PseudoVMNAND_MM_"#mti.BX) VR:$rs, VR:$rs, mti.AVL, mti.Log2SEW)>; } } diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td index e48a6f930929..2026ba79e623 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td @@ -2699,51 +2699,51 @@ foreach mti = AllMasks in { (!cast("PseudoVMCLR_M_" # mti.BX) GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmand_vl VR:$rs1, VR:$rs2, VLOpFrag)), - (!cast("PseudoVMAND_MM_" # mti.LMul.MX) + (!cast("PseudoVMAND_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmor_vl VR:$rs1, VR:$rs2, VLOpFrag)), - (!cast("PseudoVMOR_MM_" # mti.LMul.MX) + (!cast("PseudoVMOR_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmxor_vl VR:$rs1, VR:$rs2, VLOpFrag)), - (!cast("PseudoVMXOR_MM_" # mti.LMul.MX) + (!cast("PseudoVMXOR_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmand_vl VR:$rs1, (riscv_vmnot_vl VR:$rs2, VLOpFrag), VLOpFrag)), - (!cast("PseudoVMANDN_MM_" # mti.LMul.MX) + (!cast("PseudoVMANDN_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmor_vl VR:$rs1, (riscv_vmnot_vl VR:$rs2, VLOpFrag), VLOpFrag)), - (!cast("PseudoVMORN_MM_" # mti.LMul.MX) + (!cast("PseudoVMORN_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; // XOR is associative so we need 2 patterns for VMXNOR. def : Pat<(mti.Mask (riscv_vmxor_vl (riscv_vmnot_vl VR:$rs1, VLOpFrag), VR:$rs2, VLOpFrag)), - (!cast("PseudoVMXNOR_MM_" # mti.LMul.MX) + (!cast("PseudoVMXNOR_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmnot_vl (riscv_vmand_vl VR:$rs1, VR:$rs2, VLOpFrag), VLOpFrag)), - (!cast("PseudoVMNAND_MM_" # mti.LMul.MX) + (!cast("PseudoVMNAND_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmnot_vl (riscv_vmor_vl VR:$rs1, VR:$rs2, VLOpFrag), VLOpFrag)), - (!cast("PseudoVMNOR_MM_" # mti.LMul.MX) + (!cast("PseudoVMNOR_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; def : Pat<(mti.Mask (riscv_vmnot_vl (riscv_vmxor_vl VR:$rs1, VR:$rs2, VLOpFrag), VLOpFrag)), - (!cast("PseudoVMXNOR_MM_" # mti.LMul.MX) + (!cast("PseudoVMXNOR_MM_" # mti.BX) VR:$rs1, VR:$rs2, GPR:$vl, mti.Log2SEW)>; // Match the not idiom to the vmnot.m pseudo. def : Pat<(mti.Mask (riscv_vmnot_vl VR:$rs, VLOpFrag)), - (!cast("PseudoVMNAND_MM_" # mti.LMul.MX) + (!cast("PseudoVMNAND_MM_" # mti.BX) VR:$rs, VR:$rs, GPR:$vl, mti.Log2SEW)>; // 15.2 Vector count population in mask vcpop.m diff --git a/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir b/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir index 912fc2ccbd12..5f23823d1010 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir +++ b/llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir @@ -547,19 +547,19 @@ name: vmop_mm body: | bb.0: ; CHECK-LABEL: name: vmop_mm - ; CHECK: %x:vr = PseudoVMAND_MM_M1 $noreg, $noreg, 1, 0 /* e8 */ - ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0 /* e8 */ - %x:vr = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 - %y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0 + ; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, 1, 0 /* e8 */ + ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0 /* e8 */ + %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 + %y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0 ... --- name: vmop_mm_incompatible_eew body: | bb.0: ; CHECK-LABEL: name: vmop_mm_incompatible_eew - ; CHECK: %x:vr = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 /* e8 */ + ; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 /* e8 */ ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ - %x:vr = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 + %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 %y:vr = PseudoVADD_VV_M1 $noreg, $noreg, %x, 1, 3 /* e8 */, 0 ... --- @@ -567,19 +567,19 @@ name: vmop_mm_incompatible_emul body: | bb.0: ; CHECK-LABEL: name: vmop_mm_incompatible_emul - ; CHECK: %x:vr = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 /* e8 */ - ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0 /* e8 */ - %x:vr = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 - %y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0 + ; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 /* e8 */ + ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0 /* e8 */ + %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 + %y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0 ... --- name: vmop_mm_mask body: | bb.0: ; CHECK-LABEL: name: vmop_mm_mask - ; CHECK: %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, 1, 0 /* e8 */ + ; CHECK: %x:vmv0 = PseudoVMAND_MM_B8 $noreg, $noreg, 1, 0 /* e8 */ ; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ - %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 + %x:vmv0 = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 %y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 ... --- @@ -587,9 +587,9 @@ name: vmop_mm_mask_larger_emul_user body: | bb.0: ; CHECK-LABEL: name: vmop_mm_mask_larger_emul_user - ; CHECK: %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, 1, 0 /* e8 */ + ; CHECK: %x:vmv0 = PseudoVMAND_MM_B8 $noreg, $noreg, 1, 0 /* e8 */ ; CHECK-NEXT: %y:vrm2nov0 = PseudoVADD_VV_M2_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0 /* tu, mu */ - %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 + %x:vmv0 = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 %y:vrm2nov0 = PseudoVADD_VV_M2_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0 ... --- @@ -597,9 +597,9 @@ name: vmop_mm_mask_incompatible_emul body: | bb.0: ; CHECK-LABEL: name: vmop_mm_mask_incompatible_emul - ; CHECK: %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 /* e8 */ + ; CHECK: %x:vmv0 = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 /* e8 */ ; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ - %x:vmv0 = PseudoVMAND_MM_M1 $noreg, $noreg, -1, 0 + %x:vmv0 = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 %y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0 ... --- @@ -608,9 +608,9 @@ body: | bb.0: ; CHECK-LABEL: name: vmop_vv ; CHECK: %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, 1, 3 /* e8 */ - ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0 /* e8 */ + ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0 /* e8 */ %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ - %y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0 + %y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0 ... --- name: vmop_vv_maskuser @@ -638,9 +638,9 @@ body: | bb.0: ; CHECK-LABEL: name: vmop_vv_incompatible_emul ; CHECK: %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ - ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0 /* e8 */ + ; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0 /* e8 */ %x:vr = PseudoVMSEQ_VV_M1 $noreg, $noreg, -1, 3 /* e8 */ - %y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0 + %y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0 ... --- name: vmop_vv_maskuser_incompaible_emul diff --git a/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir b/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir index 6f97abcd0fad..449ee44d5dc5 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir +++ b/llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir @@ -822,7 +822,7 @@ body: | ; CHECK-NEXT: bb.1: ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000) ; CHECK-NEXT: {{ $}} - ; CHECK-NEXT: %mask:vr = PseudoVMANDN_MM_MF8 %t6, %t3, -1, 0 /* e8 */, implicit $vl, implicit $vtype + ; CHECK-NEXT: %mask:vr = PseudoVMANDN_MM_B64 %t6, %t3, -1, 0 /* e8 */, implicit $vl, implicit $vtype ; CHECK-NEXT: BEQ %a, $x0, %bb.3 ; CHECK-NEXT: PseudoBR %bb.2 ; CHECK-NEXT: {{ $}} @@ -857,7 +857,7 @@ body: | bb.1: successors: %bb.3, %bb.2 - %mask:vr = PseudoVMANDN_MM_MF8 %t6, %t3, -1, 0 + %mask:vr = PseudoVMANDN_MM_B64 %t6, %t3, -1, 0 %t2:gpr = COPY $x0 BEQ %a, %t2, %bb.3 PseudoBR %bb.2 -- cgit v1.2.3 From 2bf3ef18471a987aea32fd845535b58aedbb3e46 Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Fri, 13 Dec 2024 06:14:41 +0000 Subject: [BOLT] Require non root user for unreadable-profile.test (#119816) This patch adds a requirement for a non root user in unreadable-profile.test. This test fails if run as a root user (like in a container without explicitly changing the user), which can lead to some CI test failures. --- bolt/test/unreadable-profile.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bolt/test/unreadable-profile.test b/bolt/test/unreadable-profile.test index fe1ca93f3221..4c1cd8af0a62 100644 --- a/bolt/test/unreadable-profile.test +++ b/bolt/test/unreadable-profile.test @@ -1,4 +1,4 @@ -REQUIRES: system-linux +REQUIRES: system-linux, non-root-user RUN: touch %t.profile && chmod 000 %t.profile RUN: %clang %S/Inputs/hello.c -o %t -- cgit v1.2.3 From ae89be0797e663b5e699104f58cbb8f5a090080b Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Fri, 13 Dec 2024 03:16:03 +0000 Subject: [ORC-RT] Fix comments. NFC. Fix file name, symbol name, and formatting in comments. --- compiler-rt/lib/orc/macho_tlv.x86-64.S | 2 +- compiler-rt/lib/orc/sysv_reenter.arm64.S | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler-rt/lib/orc/macho_tlv.x86-64.S b/compiler-rt/lib/orc/macho_tlv.x86-64.S index e3daf23e3029..04b5bd7eba67 100644 --- a/compiler-rt/lib/orc/macho_tlv.x86-64.S +++ b/compiler-rt/lib/orc/macho_tlv.x86-64.S @@ -1,4 +1,4 @@ -//===-- orc_rt_macho_tlv.x86-64.s -------------------------------*- ASM -*-===// +//===-- macho_tlv.x86-64.s --------------------------------------*- ASM -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. diff --git a/compiler-rt/lib/orc/sysv_reenter.arm64.S b/compiler-rt/lib/orc/sysv_reenter.arm64.S index bd74a33bc634..74941c459d6a 100644 --- a/compiler-rt/lib/orc/sysv_reenter.arm64.S +++ b/compiler-rt/lib/orc/sysv_reenter.arm64.S @@ -15,7 +15,7 @@ .text - // Saves GPRs, calls __orc_rt_sysv_resolve + // Saves GPRs, calls __orc_rt_resolve .globl __orc_rt_sysv_reenter __orc_rt_sysv_reenter: // Save register state, set up new stack frome. @@ -49,14 +49,14 @@ __orc_rt_sysv_reenter: stp q2, q3, [sp, #-32]! stp q0, q1, [sp, #-32]! - // Look up the return address and subtract 8 from it (on the - // assumption that it's a standard arm64 reentry trampoline) to get - // back the trampoline's address. + // Look up the return address and subtract 8 from it (on the assumption + // that it's a standard arm64 reentry trampoline) to get back the + // trampoline's address. sub x0, x30, #8 - // Call __orc_rt_sysv_resolve to look up the implementation - // corresponding to the calling stub, then store this in x17 (which - // we'll return to below. + // Call __orc_rt_resolve to look up the implementation corresponding to + // the calling stub, then store this in x17 (which we'll return to + // below). #if !defined(__APPLE__) bl __orc_rt_resolve #else -- cgit v1.2.3 From a1739d2501e813f629268f99a2ab3485aaf02ba1 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Fri, 13 Dec 2024 04:29:57 +0000 Subject: [JITLink][aarch64] Fix comment for trampoline instruction sequence. NFC. The comment was from a prototype and doesn't reflect the final instruction sequence. --- llvm/include/llvm/ExecutionEngine/JITLink/aarch64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/aarch64.h b/llvm/include/llvm/ExecutionEngine/JITLink/aarch64.h index 1fa957178a12..62221caa71c9 100644 --- a/llvm/include/llvm/ExecutionEngine/JITLink/aarch64.h +++ b/llvm/include/llvm/ExecutionEngine/JITLink/aarch64.h @@ -758,7 +758,7 @@ inline Symbol &createAnonymousPointerJumpStub(LinkGraph &G, /// AArch64 reentry trampoline. /// /// Contains the instruction sequence for a trampoline that stores its return -/// address on the stack and passes its own address in x0: +/// address (and stack pointer) on the stack and calls the given reentry symbol: /// STP x29, x30, [sp, #-16]! /// BL extern const char ReentryTrampolineContent[8]; -- cgit v1.2.3 From 81c680a89622466b279357ca2e1045ef84d2c534 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Fri, 13 Dec 2024 05:58:49 +0000 Subject: [ORC] Improve JITLinkReentryTrampolines "arch not supported" error message. "Architecture not supported" becomes "JITLinkReentryTrampolines: architecture not supported". --- llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp b/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp index 1f6ec783b6c1..834292c16509 100644 --- a/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp +++ b/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp @@ -86,12 +86,14 @@ JITLinkReentryTrampolines::Create(ObjectLinkingLayer &ObjLinkingLayer) { EmitTrampolineFn EmitTrampoline; - switch (ObjLinkingLayer.getExecutionSession().getTargetTriple().getArch()) { + const auto &TT = ObjLinkingLayer.getExecutionSession().getTargetTriple(); + switch (TT.getArch()) { case Triple::aarch64: EmitTrampoline = aarch64::createAnonymousReentryTrampoline; break; default: - return make_error("Architecture not supported", + return make_error("JITLinkReentryTrampolines: architecture " + + TT.getArchName() + " not supported", inconvertibleErrorCode()); } -- cgit v1.2.3 From 1865f0e203d4b23e676fb6ce72cf8797d0f0b80a Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 12 Dec 2024 22:27:45 -0800 Subject: [lld-link] Replace warn(...) with Warn(ctx) --- lld/COFF/PDB.cpp | 53 +++++++++++++++++++++++++++++------------------------ lld/COFF/Writer.cpp | 10 +++++----- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index 4382dd677ff5..6dcab906b35b 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -183,6 +183,7 @@ struct UnrelocatedFpoData { enum : uint32_t { kSymbolStreamMagicSize = 4 }; class DebugSHandler { + COFFLinkerContext &ctx; PDBLinker &linker; /// The object file whose .debug$S sections we're processing. @@ -229,8 +230,8 @@ class DebugSHandler { const DebugSubsectionRecord &ss); public: - DebugSHandler(PDBLinker &linker, ObjFile &file) - : linker(linker), file(file) {} + DebugSHandler(COFFLinkerContext &ctx, PDBLinker &linker, ObjFile &file) + : ctx(ctx), linker(linker), file(file) {} void handleDebugS(SectionChunk *debugChunk); @@ -384,10 +385,11 @@ void PDBLinker::translateIdSymbols(MutableArrayRef &recordData, } } if (newType == TypeIndex(SimpleTypeKind::NotTranslated)) { - warn(formatv("procedure symbol record for `{0}` in {1} refers to PDB " - "item index {2:X} which is not a valid function ID record", - getSymbolName(CVSymbol(recordData)), - source->file->getName(), ti->getIndex())); + Warn(ctx) << formatv( + "procedure symbol record for `{0}` in {1} refers to PDB " + "item index {2:X} which is not a valid function ID record", + getSymbolName(CVSymbol(recordData)), source->file->getName(), + ti->getIndex()); } *ti = newType; } @@ -420,11 +422,12 @@ static void scopeStackOpen(SmallVectorImpl &stack, } // To close a scope, update the record that opened the scope. -static void scopeStackClose(SmallVectorImpl &stack, +static void scopeStackClose(COFFLinkerContext &ctx, + SmallVectorImpl &stack, std::vector &storage, uint32_t storageBaseOffset, ObjFile *file) { if (stack.empty()) { - warn("symbol scopes are not balanced in " + file->getName()); + Warn(ctx) << "symbol scopes are not balanced in " << file->getName(); return; } @@ -594,7 +597,7 @@ void PDBLinker::analyzeSymbolSubsection( cantFail(symData.readBytes(0, symData.getLength(), symsBuffer)); if (symsBuffer.empty()) - warn("empty symbols subsection in " + file->getName()); + Warn(ctx) << "empty symbols subsection in " << file->getName(); Error ec = forEachCodeViewRecord( symsBuffer, [&](CVSymbol sym) -> llvm::Error { @@ -635,7 +638,7 @@ void PDBLinker::analyzeSymbolSubsection( // any partial records, undo that. For globals, we just keep what we have and // continue. if (ec) { - warn("corrupt symbol records in " + file->getName()); + Warn(ctx) << "corrupt symbol records in " << file->getName(); moduleSymOffset = moduleSymStart; consumeError(std::move(ec)); } @@ -678,7 +681,7 @@ Error PDBLinker::writeAllModuleSymbolRecords(ObjFile *file, if (symbolOpensScope(sym.kind())) scopeStackOpen(scopes, storage); else if (symbolEndsScope(sym.kind())) - scopeStackClose(scopes, storage, moduleSymStart, file); + scopeStackClose(ctx, scopes, storage, moduleSymStart, file); // Copy, relocate, and rewrite each module symbol. if (symbolGoesInModuleStream(sym, scopes.size())) { @@ -740,12 +743,12 @@ static pdb::SectionContrib createSectionContrib(COFFLinkerContext &ctx, } static uint32_t -translateStringTableIndex(uint32_t objIndex, +translateStringTableIndex(COFFLinkerContext &ctx, uint32_t objIndex, const DebugStringTableSubsectionRef &objStrTable, DebugStringTableSubsection &pdbStrTable) { auto expectedString = objStrTable.getString(objIndex); if (!expectedString) { - warn("Invalid string table reference"); + Warn(ctx) << "Invalid string table reference"; consumeError(expectedString.takeError()); return 0; } @@ -820,8 +823,9 @@ void DebugSHandler::handleDebugS(SectionChunk *debugChunk) { break; default: - warn("ignoring unknown debug$S subsection kind 0x" + - utohexstr(uint32_t(ss.kind())) + " in file " + toString(&file)); + Warn(ctx) << "ignoring unknown debug$S subsection kind 0x" + << utohexstr(uint32_t(ss.kind())) << " in file " + << toString(&file); break; } } @@ -934,8 +938,9 @@ void DebugSHandler::finish() { "string table subsection"); if (!stringTableFixups.empty()) - warn("No StringTable subsection was encountered, but there are string " - "table references"); + Warn(ctx) + << "No StringTable subsection was encountered, but there are string " + "table references"; return; } @@ -967,8 +972,8 @@ void DebugSHandler::finish() { exitOnErr(fds.initialize(reader)); for (codeview::FrameData fd : fds) { fd.RvaStart += rvaStart; - fd.FrameFunc = - translateStringTableIndex(fd.FrameFunc, cvStrTab, linker.pdbStrTab); + fd.FrameFunc = translateStringTableIndex(ctx, fd.FrameFunc, cvStrTab, + linker.pdbStrTab); dbiBuilder.addNewFpoData(fd); } } @@ -976,8 +981,8 @@ void DebugSHandler::finish() { // Translate the fixups and pass them off to the module builder so they will // be applied during writing. for (StringTableFixup &ref : stringTableFixups) { - ref.StrTabOffset = - translateStringTableIndex(ref.StrTabOffset, cvStrTab, linker.pdbStrTab); + ref.StrTabOffset = translateStringTableIndex(ctx, ref.StrTabOffset, + cvStrTab, linker.pdbStrTab); } file.moduleDBI->setStringTableFixups(std::move(stringTableFixups)); @@ -1032,7 +1037,7 @@ void PDBLinker::addDebugSymbols(TpiSource *source) { ScopedTimer t(ctx.symbolMergingTimer); ExitOnError exitOnErr; pdb::DbiStreamBuilder &dbiBuilder = builder.getDbiBuilder(); - DebugSHandler dsh(*this, *source->file); + DebugSHandler dsh(ctx, *this, *source->file); // Now do all live .debug$S and .debug$F sections. for (SectionChunk *debugChunk : source->file->getDebugChunks()) { if (!debugChunk->live || debugChunk->getSize() == 0) @@ -1326,7 +1331,7 @@ void PDBLinker::addNatvisFiles() { ErrorOr> dataOrErr = MemoryBuffer::getFile(file); if (!dataOrErr) { - warn("Cannot open input file: " + file); + Warn(ctx) << "Cannot open input file: " << file; continue; } std::unique_ptr data = std::move(*dataOrErr); @@ -1348,7 +1353,7 @@ void PDBLinker::addNamedStreams() { ErrorOr> dataOrErr = MemoryBuffer::getFile(file); if (!dataOrErr) { - warn("Cannot open input file: " + file); + Warn(ctx) << "Cannot open input file: " << file; continue; } std::unique_ptr data = std::move(*dataOrErr); diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 3d38c3b6c241..3c6112b7fc89 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -2686,7 +2686,7 @@ template void Writer::prepareLoadConfig(T *loadConfig) { #define RETURN_IF_NOT_CONTAINS(field) \ if (loadConfigSize < offsetof(T, field) + sizeof(T::field)) { \ - warn("'_load_config_used' structure too small to include " #field); \ + Warn(ctx) << "'_load_config_used' structure too small to include " #field; \ return; \ } @@ -2696,12 +2696,12 @@ template void Writer::prepareLoadConfig(T *loadConfig) { #define CHECK_VA(field, sym) \ if (auto *s = dyn_cast(ctx.symtab.findUnderscore(sym))) \ if (loadConfig->field != ctx.config.imageBase + s->getRVA()) \ - warn(#field " not set correctly in '_load_config_used'"); + Warn(ctx) << #field " not set correctly in '_load_config_used'"; #define CHECK_ABSOLUTE(field, sym) \ if (auto *s = dyn_cast(ctx.symtab.findUnderscore(sym))) \ if (loadConfig->field != s->getVA()) \ - warn(#field " not set correctly in '_load_config_used'"); + Warn(ctx) << #field " not set correctly in '_load_config_used'"; if (ctx.config.dependentLoadFlags) { RETURN_IF_NOT_CONTAINS(DependentLoadFlags) @@ -2715,8 +2715,8 @@ template void Writer::prepareLoadConfig(T *loadConfig) { ctx.dynamicRelocs->getRVA() - relocSec->getRVA(); } else { - warn("'_load_config_used' structure too small to include dynamic " - "relocations"); + Warn(ctx) << "'_load_config_used' structure too small to include dynamic " + "relocations"; } } -- cgit v1.2.3 From 7a648554f886fbc043c4f3f58ca88f6c4535f2cf Mon Sep 17 00:00:00 2001 From: Akshat Oke Date: Fri, 13 Dec 2024 11:58:53 +0530 Subject: [AMDGPU][CodeGen] Do not backtrace invalid -regalloc param (#119687) No need to generate a stack trace and a GitHub issue prompt on a wrongly set regalloc option. --- llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 4 ++-- llvm/test/CodeGen/AMDGPU/sgpr-regalloc-flags.ll | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 7256eec89008..88f7fe0a98d1 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -1560,7 +1560,7 @@ static const char RegAllocOptNotSupportedMessage[] = bool GCNPassConfig::addRegAssignAndRewriteFast() { if (!usingDefaultRegAlloc()) - report_fatal_error(RegAllocOptNotSupportedMessage); + report_fatal_error(RegAllocOptNotSupportedMessage, /*GenCrashDiag=*/false); addPass(&GCNPreRALongBranchRegID); @@ -1586,7 +1586,7 @@ bool GCNPassConfig::addRegAssignAndRewriteFast() { bool GCNPassConfig::addRegAssignAndRewriteOptimized() { if (!usingDefaultRegAlloc()) - report_fatal_error(RegAllocOptNotSupportedMessage); + report_fatal_error(RegAllocOptNotSupportedMessage, /*GenCrashDiag=*/false); addPass(&GCNPreRALongBranchRegID); diff --git a/llvm/test/CodeGen/AMDGPU/sgpr-regalloc-flags.ll b/llvm/test/CodeGen/AMDGPU/sgpr-regalloc-flags.ll index 52ad7e535520..33585024d81d 100644 --- a/llvm/test/CodeGen/AMDGPU/sgpr-regalloc-flags.ll +++ b/llvm/test/CodeGen/AMDGPU/sgpr-regalloc-flags.ll @@ -9,8 +9,8 @@ ; RUN: llc -verify-machineinstrs=0 -sgpr-regalloc=basic -mtriple=amdgcn-amd-amdhsa -debug-pass=Structure -o /dev/null %s 2>&1 | FileCheck -check-prefix=BASIC-DEFAULT %s ; RUN: llc -verify-machineinstrs=0 -sgpr-regalloc=basic -wwm-regalloc=basic -vgpr-regalloc=basic -mtriple=amdgcn-amd-amdhsa -debug-pass=Structure -o /dev/null %s 2>&1 | FileCheck -check-prefix=BASIC-BASIC %s -; RUN: not --crash llc -verify-machineinstrs=0 -regalloc=basic -mtriple=amdgcn-amd-amdhsa -debug-pass=Structure -o /dev/null %s 2>&1 | FileCheck -check-prefix=REGALLOC %s -; RUN: not --crash llc -verify-machineinstrs=0 -regalloc=fast -O0 -mtriple=amdgcn-amd-amdhsa -debug-pass=Structure -o /dev/null %s 2>&1 | FileCheck -check-prefix=REGALLOC %s +; RUN: not llc -verify-machineinstrs=0 -regalloc=basic -mtriple=amdgcn-amd-amdhsa -debug-pass=Structure -o /dev/null %s 2>&1 | FileCheck -check-prefix=REGALLOC %s +; RUN: not llc -verify-machineinstrs=0 -regalloc=fast -O0 -mtriple=amdgcn-amd-amdhsa -debug-pass=Structure -o /dev/null %s 2>&1 | FileCheck -check-prefix=REGALLOC %s ; REGALLOC: -regalloc not supported with amdgcn. Use -sgpr-regalloc, -wwm-regalloc, and -vgpr-regalloc -- cgit v1.2.3 From 37d0e2f46e885f47c97b78c21d6b8668cd0ef871 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 13 Dec 2024 15:57:53 +0900 Subject: clang: Fix broken check prefix in test (#119821) --- clang/test/CodeGenOpenCL/opencl_types.cl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/CodeGenOpenCL/opencl_types.cl b/clang/test/CodeGenOpenCL/opencl_types.cl index 7cab853c76d9..eb68ab850744 100644 --- a/clang/test/CodeGenOpenCL/opencl_types.cl +++ b/clang/test/CodeGenOpenCL/opencl_types.cl @@ -64,11 +64,11 @@ kernel void foo(image1d_t img) { kernel void foo_ro_pipe(read_only pipe int p) {} // CHECK-SPIR: @foo_ro_pipe(target("spirv.Pipe", 0) %p) -// CHECK_AMDGCN: @foo_ro_pipe(ptr addrspace(1) %p) +// CHECK-AMDGCN: @foo_ro_pipe(ptr addrspace(1) %p) kernel void foo_wo_pipe(write_only pipe int p) {} // CHECK-SPIR: @foo_wo_pipe(target("spirv.Pipe", 1) %p) -// CHECK_AMDGCN: @foo_wo_pipe(ptr addrspace(1) %p) +// CHECK-AMDGCN: @foo_wo_pipe(ptr addrspace(1) %p) void __attribute__((overloadable)) bad1(image1d_t b, image2d_t c, image2d_t d) {} // CHECK-SPIR-LABEL: @{{_Z4bad114ocl_image1d_ro14ocl_image2d_roS0_|"\\01\?bad1@@\$\$J0YAXPAUocl_image1d_ro@@PAUocl_image2d_ro@@1@Z"}} -- cgit v1.2.3 From ea44647a0b49de826191eeb6e05020262b5a81e9 Mon Sep 17 00:00:00 2001 From: Owen Pan Date: Thu, 12 Dec 2024 23:19:36 -0800 Subject: [clang-format] Write in text mode with LF in dump_format_[help|style].py --- clang/docs/tools/dump_format_help.py | 6 ++++-- clang/docs/tools/dump_format_style.py | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/clang/docs/tools/dump_format_help.py b/clang/docs/tools/dump_format_help.py index baf90048ee13..ba41ed8c02c8 100755 --- a/clang/docs/tools/dump_format_help.py +++ b/clang/docs/tools/dump_format_help.py @@ -72,5 +72,7 @@ with open(DOC_FILE, encoding="utf-8") as f: contents = substitute(contents, "FORMAT_HELP", help_text) -with open(opts.output if opts.output else DOC_FILE, "wb") as output: - output.write(contents.encode()) +with open( + opts.output if opts.output else DOC_FILE, "w", newline="", encoding="utf-8" +) as f: + f.write(contents) diff --git a/clang/docs/tools/dump_format_style.py b/clang/docs/tools/dump_format_style.py index f00f3ee8b20e..f035143f6b3d 100755 --- a/clang/docs/tools/dump_format_style.py +++ b/clang/docs/tools/dump_format_style.py @@ -411,8 +411,8 @@ class OptionsReader: state = State.InStruct enums[enum.name] = enum else: - # Enum member without documentation. Must be documented where the enum - # is used. + # Enum member without documentation. Must be documented + # where the enum is used. pass elif state == State.InNestedEnum: if line.startswith("///"): @@ -492,5 +492,7 @@ with open(DOC_FILE, encoding="utf-8") as f: contents = substitute(contents, "FORMAT_STYLE_OPTIONS", options_text) -with open(args.output if args.output else DOC_FILE, "wb") as output: - output.write(contents.encode()) +with open( + args.output if args.output else DOC_FILE, "w", newline="", encoding="utf-8" +) as f: + f.write(contents) -- cgit v1.2.3 From 5828aef014ea2b131fb126b328e7828d628ad5ed Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Fri, 13 Dec 2024 16:46:36 +0900 Subject: [sanitizer_common] Return nullptr from ASan on ERROR_COMMITMENT_LIMIT (#119753) Followup to #117929 --- compiler-rt/lib/sanitizer_common/sanitizer_win.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp index 1eef16fbde3e..fd0f989ee392 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp @@ -167,7 +167,7 @@ static void *ReturnNullptrOnOOMOrDie(uptr size, const char *mem_type, // Assumption: VirtualAlloc is the last system call that was invoked before // this method. - // VirtualAlloc emits one of 2 error codes when running out of memory + // VirtualAlloc emits one of 3 error codes when running out of memory // 1. ERROR_NOT_ENOUGH_MEMORY: // There's not enough memory to execute the command // 2. ERROR_INVALID_PARAMETER: @@ -176,12 +176,12 @@ static void *ReturnNullptrOnOOMOrDie(uptr size, const char *mem_type, // (the `lpMaximumApplicationAddress` field within the `SystemInfo` struct). // This does not seem to be officially documented, but is corroborated here: // https://stackoverflow.com/questions/45833674/why-does-virtualalloc-fail-for-lpaddress-greater-than-0x6ffffffffff - - // Note - It's possible that 'ERROR_COMMITMENT_LIMIT' needs to be handled here - // as well. It is currently not handled due to the lack of a reproducer that - // induces the error code. + // 3. ERROR_COMMITMENT_LIMIT: + // VirtualAlloc will return this if e.g. the pagefile is too small to commit + // the requested amount of memory. if (last_error == ERROR_NOT_ENOUGH_MEMORY || - last_error == ERROR_INVALID_PARAMETER) + last_error == ERROR_INVALID_PARAMETER || + last_error == ERROR_COMMITMENT_LIMIT) return nullptr; ReportMmapFailureAndDie(size, mem_type, mmap_type, last_error); } -- cgit v1.2.3 From 28c3bf5c6dad0974f9f15b58afd0935c0c6cb3e4 Mon Sep 17 00:00:00 2001 From: Younan Zhang Date: Fri, 13 Dec 2024 15:50:41 +0800 Subject: [Clang][Parser] Add a warning to ambiguous uses of T...[N] types (#116332) `void f(T... [N])` is no longer treated as a function with a parameter of pack expansion type after the implementation of the pack indexing feature. This patch introduces a warning to clarify such cases while maintaining it as a pack indexing type in all language modes. Closes https://github.com/llvm/llvm-project/issues/115222 --- clang/include/clang/Basic/DiagnosticParseKinds.td | 3 ++ clang/lib/Parse/ParseExprCXX.cpp | 16 ++++++++++- .../test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp | 8 ++++-- clang/test/Parser/cxx0x-decl.cpp | 1 + clang/test/Parser/cxx2c-pack-indexing.cpp | 5 ++-- .../test/SemaCXX/cxx2c-pack-indexing-ext-diags.cpp | 32 ++++++++++++++++++++++ 6 files changed, 58 insertions(+), 7 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td index 9fa8d5901bd0..86fcae209c40 100644 --- a/clang/include/clang/Basic/DiagnosticParseKinds.td +++ b/clang/include/clang/Basic/DiagnosticParseKinds.td @@ -721,6 +721,9 @@ def warn_empty_init_statement : Warning< "has no effect">, InGroup, DefaultIgnore; def err_keyword_as_parameter : Error < "invalid parameter name: '%0' is a keyword">; +def warn_pre_cxx26_ambiguous_pack_indexing_type : Warning< + "%0 is no longer a pack expansion but a pack " + "indexing type; add a name to specify a pack expansion">, InGroup; // C++ derived classes def err_dup_virtual : Error<"duplicate 'virtual' in base specifier">; diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index 03a58048e53a..33a90e0cb8a4 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -238,7 +238,8 @@ bool Parser::ParseOptionalCXXScopeSpecifier( else if (!HasScopeSpecifier && Tok.is(tok::identifier) && GetLookAheadToken(1).is(tok::ellipsis) && - GetLookAheadToken(2).is(tok::l_square)) { + GetLookAheadToken(2).is(tok::l_square) && + !GetLookAheadToken(3).is(tok::r_square)) { SourceLocation Start = Tok.getLocation(); DeclSpec DS(AttrFactory); SourceLocation CCLoc; @@ -253,6 +254,19 @@ bool Parser::ParseOptionalCXXScopeSpecifier( if (Type.isNull()) return false; + // C++ [cpp23.dcl.dcl-2]: + // Previously, T...[n] would declare a pack of function parameters. + // T...[n] is now a pack-index-specifier. [...] Valid C++ 2023 code that + // declares a pack of parameters without specifying a declarator-id + // becomes ill-formed. + // + // However, we still treat it as a pack indexing type because the use case + // is fairly rare, to ensure semantic consistency given that we have + // backported this feature to pre-C++26 modes. + if (!Tok.is(tok::coloncolon) && !getLangOpts().CPlusPlus26 && + getCurScope()->isFunctionDeclarationScope()) + Diag(Start, diag::warn_pre_cxx26_ambiguous_pack_indexing_type) << Type; + if (!TryConsumeToken(tok::coloncolon, CCLoc)) { AnnotateExistingIndexedTypeNamePack(ParsedType::make(Type), Start, EndLoc); diff --git a/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp b/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp index dbb6e60d9b93..a633c108bc22 100644 --- a/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp +++ b/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp @@ -57,9 +57,11 @@ template void b(T[] ...); template -void c(T ... []); // expected-error {{expected expression}} \ - // expected-error {{'T' does not refer to the name of a parameter pack}} \ - // expected-warning {{pack indexing is a C++2c extension}} +void c(T ... []); // expected-error {{type 'T[]' of function parameter pack does not contain any unexpanded parameter packs}} + +// A function that takes pointers to each type T as arguments, after any decay. +template +void g(T...[]); template void d(T ... x[]); // expected-error{{type 'T[]' of function parameter pack does not contain any unexpanded parameter packs}} diff --git a/clang/test/Parser/cxx0x-decl.cpp b/clang/test/Parser/cxx0x-decl.cpp index a0b3266c738f..6d4f16c6f533 100644 --- a/clang/test/Parser/cxx0x-decl.cpp +++ b/clang/test/Parser/cxx0x-decl.cpp @@ -214,6 +214,7 @@ struct MemberComponentOrder : Base { void NoMissingSemicolonHere(struct S [3]); template void NoMissingSemicolonHereEither(struct S... [N]); +// expected-warning@-1 {{'S...[N]' is no longer a pack expansion but a pack indexing type; add a name to specify a pack expansion}} \ // expected-error@-1 {{'S' does not refer to the name of a parameter pack}} \ // expected-error@-1 {{declaration of anonymous struct must be a definition}} \ // expected-error@-1 {{expected parameter declarator}} \ diff --git a/clang/test/Parser/cxx2c-pack-indexing.cpp b/clang/test/Parser/cxx2c-pack-indexing.cpp index 99347a2f8f15..72e286322fa9 100644 --- a/clang/test/Parser/cxx2c-pack-indexing.cpp +++ b/clang/test/Parser/cxx2c-pack-indexing.cpp @@ -12,8 +12,7 @@ struct S { // expected-note {{to match this '['}} \ // expected-warning{{declaration does not declare anything}} - T...[]; // expected-error{{expected expression}} \ - // expected-warning{{declaration does not declare anything}} + T...[]; // expected-error{{expected member name or ';' after declaration specifiers}} void f(auto... v) { decltype(v...[1]) a = v...[1]; @@ -65,7 +64,7 @@ int main() { } -namespace GH11460 { +namespace GH111460 { template requires( ); // expected-error {{expected expression}} struct SS { diff --git a/clang/test/SemaCXX/cxx2c-pack-indexing-ext-diags.cpp b/clang/test/SemaCXX/cxx2c-pack-indexing-ext-diags.cpp index 80dfeb9b6a8b..118af8e867f5 100644 --- a/clang/test/SemaCXX/cxx2c-pack-indexing-ext-diags.cpp +++ b/clang/test/SemaCXX/cxx2c-pack-indexing-ext-diags.cpp @@ -19,3 +19,35 @@ void f(T... t) { // cxx11-warning@+1 {{pack indexing is a C++2c extension}} T...[0] c; } + +template +void g(T... [1]); // cxx11-warning {{'T...[1]' is no longer a pack expansion but a pack indexing type; add a name to specify a pack expansion}} \ + // cxx11-warning {{pack indexing is a C++2c extension}} \ + // cxx11-note {{candidate function template not viable}} \ + // cxx26-warning {{pack indexing is incompatible with C++ standards before C++2c}} \ + // cxx26-note {{candidate function template not viable}} + +template +void h(T... param[1]); + +template +struct S { + using type = T; +}; + +template +void h(typename T... [1]::type); // cxx11-warning {{pack indexing is a C++2c extension}} \ + // cxx26-warning {{pack indexing is incompatible with C++ standards before C++2c}} + +template +void x(T... [0]); // cxx11-warning {{'T...[0]' is no longer a pack expansion but a pack indexing type; add a name to specify a pack expansion}} \ + // cxx11-warning {{pack indexing is a C++2c extension}} \ + // cxx26-warning {{pack indexing is incompatible with C++ standards before C++2c}} + +void call() { + g(nullptr, nullptr); // cxx26-error {{no matching function for call to 'g'}} \ + // cxx11-error {{no matching function for call to 'g'}} + h(nullptr, nullptr); + h, S>("hello"); + x(nullptr); +} -- cgit v1.2.3 From d7a8e09893c43ad1169ff34989c3bec721d8b1a9 Mon Sep 17 00:00:00 2001 From: Owen Pan Date: Fri, 13 Dec 2024 00:03:03 -0800 Subject: [clang-format] Add --strip-trailing-cr to diff in docs_updated.test (#119666) Fixes #119517. --- clang/test/Format/docs_updated.test | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/test/Format/docs_updated.test b/clang/test/Format/docs_updated.test index 17066650a126..98d330e37ef4 100644 --- a/clang/test/Format/docs_updated.test +++ b/clang/test/Format/docs_updated.test @@ -1,5 +1,6 @@ // RUN: %python %S/../../docs/tools/dump_format_style.py -o %t.style -// RUN: diff %t.style %S/../../docs/ClangFormatStyleOptions.rst +// RUN: diff --strip-trailing-cr %t.style \ +// RUN: %S/../../docs/ClangFormatStyleOptions.rst // RUN: %python %S/../../docs/tools/dump_format_help.py -o %t.help -// RUN: diff %t.help %S/../../docs/ClangFormat.rst +// RUN: diff --strip-trailing-cr %t.help %S/../../docs/ClangFormat.rst -- cgit v1.2.3 From e32c428bec2074f954350d225104c299964b4585 Mon Sep 17 00:00:00 2001 From: Antonio Frighetto Date: Fri, 13 Dec 2024 09:06:36 +0100 Subject: [SimplifyCFG] Precommit tests for PR118955 (NFC) --- .../SimplifyCFG/X86/switch_to_lookup_table.ll | 36 ++++++---- llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll | 84 ++++++++++++++++++++++ 2 files changed, 106 insertions(+), 14 deletions(-) diff --git a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll index 9549ccdbfe9e..7f9b7a33c3c6 100644 --- a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll +++ b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll @@ -314,20 +314,20 @@ lor.end: define i32 @overflow(i32 %type) { ; CHECK-LABEL: @overflow( ; CHECK-NEXT: entry: -; CHECK-NEXT: switch i32 [[TYPE:%.*]], label [[IF_END:%.*]] [ +; CHECK-NEXT: switch i32 [[TYPE:%.*]], label [[SW_DEFAULT:%.*]] [ ; CHECK-NEXT: i32 3, label [[SW_BB3:%.*]] ; CHECK-NEXT: i32 -2147483645, label [[SW_BB3]] -; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]] +; CHECK-NEXT: i32 1, label [[IF_END:%.*]] ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]] ; CHECK-NEXT: ] ; CHECK: sw.bb1: -; CHECK-NEXT: br label [[IF_END]] +; CHECK-NEXT: br label [[SW_DEFAULT]] ; CHECK: sw.bb2: -; CHECK-NEXT: br label [[IF_END]] +; CHECK-NEXT: br label [[SW_DEFAULT]] ; CHECK: sw.bb3: -; CHECK-NEXT: br label [[IF_END]] +; CHECK-NEXT: br label [[SW_DEFAULT]] ; CHECK: if.end: -; CHECK-NEXT: [[DIRENT_TYPE_0:%.*]] = phi i32 [ 6, [[SW_BB3]] ], [ 5, [[SW_BB2]] ], [ 0, [[SW_BB1]] ], [ 3, [[ENTRY:%.*]] ] +; CHECK-NEXT: [[DIRENT_TYPE_0:%.*]] = phi i32 [ 6, [[SW_BB3]] ], [ 5, [[SW_BB2]] ], [ 0, [[IF_END]] ], [ 3, [[ENTRY:%.*]] ] ; CHECK-NEXT: ret i32 [[DIRENT_TYPE_0]] ; entry: @@ -340,15 +340,23 @@ entry: i32 3, label %sw.bb3 ] -sw.bb: br label %if.end -sw.bb1: br label %if.end -sw.bb2: br label %if.end -sw.bb3: br label %if.end -sw.default: br label %if.end -if.else: br label %if.end +sw.bb: ; preds = %entry, %entry + br label %if.end -if.end: - %dirent_type.0 = phi i32 [ 3, %sw.default ], [ 6, %sw.bb3 ], [ 5, %sw.bb2 ], [ 0, %sw.bb1 ], [ 3, %sw.bb ], [ 0, %if.else ] +sw.bb1: ; preds = %entry + br label %if.end + +sw.bb2: ; preds = %entry + br label %if.end + +sw.bb3: ; preds = %entry, %entry + br label %if.end + +sw.default: ; preds = %entry + br label %if.end + +if.end: ; preds = %sw.default, %sw.bb3, %sw.bb2, %sw.bb1, %sw.bb + %dirent_type.0 = phi i32 [ 3, %sw.default ], [ 6, %sw.bb3 ], [ 5, %sw.bb2 ], [ 0, %sw.bb1 ], [ 3, %sw.bb ] ret i32 %dirent_type.0 } diff --git a/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll b/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll index 0df4deba1a15..b7660378f1e3 100644 --- a/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll +++ b/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll @@ -127,3 +127,87 @@ define i32 @switch_dup_default(i32 %0, i32 %1, i32 %2, i32 %3) { %9 = phi i32 [ %3, %5 ], [ %2, %6 ], [ %2, %7 ] ret i32 %9 } + +define i32 @switch_dup_exit(i32 %val) { +; SIMPLIFY-CFG-LABEL: define i32 @switch_dup_exit( +; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) { +; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]: +; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [ +; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]] +; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]] +; SIMPLIFY-CFG-NEXT: i32 22, label %[[BB1:.*]] +; SIMPLIFY-CFG-NEXT: i32 15, label %[[BB2:.*]] +; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB2]] +; SIMPLIFY-CFG-NEXT: ] +; SIMPLIFY-CFG: [[BB1]]: +; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] +; SIMPLIFY-CFG: [[BB2]]: +; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] +; SIMPLIFY-CFG: [[DEFAULT]]: +; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] +; SIMPLIFY-CFG: [[EXIT]]: +; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i32 [ 0, %[[DEFAULT]] ], [ 0, %[[BB2]] ], [ 3, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ] +; SIMPLIFY-CFG-NEXT: ret i32 [[RET]] +; +entry: + switch i32 %val, label %default [ + i32 1, label %exit + i32 11, label %exit + i32 22, label %bb1 + i32 15, label %bb2 + i32 0, label %bb2 + ] + +bb1: + br label %exit + +bb2: + br label %exit + +default: + br label %exit + +exit: + %ret = phi i32 [ 0, %default ], [ 0, %bb2 ], [ 3, %bb1 ], [ 1, %entry ], [ 1, %entry ] + ret i32 %ret +} + +define i64 @switch_dup_exit_2(i32 %val) { +; SIMPLIFY-CFG-LABEL: define i64 @switch_dup_exit_2( +; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) { +; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]: +; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [ +; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]] +; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]] +; SIMPLIFY-CFG-NEXT: i32 13, label %[[BB1:.*]] +; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB1]] +; SIMPLIFY-CFG-NEXT: ] +; SIMPLIFY-CFG: [[BB1]]: +; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] +; SIMPLIFY-CFG: [[DEFAULT]]: +; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] +; SIMPLIFY-CFG: [[EXIT]]: +; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i64 [ 0, %[[DEFAULT]] ], [ 0, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ] +; SIMPLIFY-CFG-NEXT: ret i64 [[RET]] +; +entry: + switch i32 %val, label %default [ + i32 1, label %bb2 + i32 11, label %exit + i32 13, label %bb1 + i32 0, label %bb1 + ] + +bb1: + br label %exit + +bb2: + br label %exit + +default: + br label %exit + +exit: + %ret = phi i64 [ 0, %default ], [ 0, %bb1 ], [ 1, %entry ], [ 1, %bb2 ] + ret i64 %ret +} -- cgit v1.2.3 From d26df3225537f3f9dc283f4fb33d191d11802d8c Mon Sep 17 00:00:00 2001 From: Antonio Frighetto Date: Fri, 13 Dec 2024 09:06:50 +0100 Subject: [SimplifyCFG] Consider preds to switch in `simplifyDuplicateSwitchArms` Allow a duplicate basic block with multiple predecessors to the jump table to be simplified, by considering that the same basic block may appear in more switch cases. --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 18 +++++++++------- .../SimplifyCFG/X86/switch_to_lookup_table.ll | 10 ++++----- llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll | 24 ++++++---------------- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index c7e814bced57..18a1cb6d44b4 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -7474,9 +7474,6 @@ static bool simplifySwitchOfCmpIntrinsic(SwitchInst *SI, IRBuilderBase &Builder, /// IncomingValue and add it in the Wrapper so isEqual can do O(1) checking /// of the incoming values. struct SwitchSuccWrapper { - // Keep so we can use SwitchInst::setSuccessor to do the replacement. It won't - // be important to equality though. - unsigned SuccNum; BasicBlock *Dest; DenseMap> *PhiPredIVs; }; @@ -7563,6 +7560,7 @@ bool SimplifyCFGOpt::simplifyDuplicateSwitchArms(SwitchInst *SI, SmallPtrSet Phis; SmallPtrSet Seen; DenseMap> PhiPredIVs; + DenseMap> BBToSuccessorIndexes; SmallVector Cases; Cases.reserve(SI->getNumSuccessors()); @@ -7575,8 +7573,9 @@ bool SimplifyCFGOpt::simplifyDuplicateSwitchArms(SwitchInst *SI, continue; // FIXME: This case needs some extra care because the terminators other than - // SI need to be updated. - if (BB->hasNPredecessorsOrMore(2)) + // SI need to be updated. For now, consider only backedges to the SI. + if (BB->hasNPredecessorsOrMore(4) || + BB->getUniquePredecessor() != SI->getParent()) continue; // FIXME: Relax that the terminator is a BranchInst by checking for equality @@ -7591,8 +7590,11 @@ bool SimplifyCFGOpt::simplifyDuplicateSwitchArms(SwitchInst *SI, for (BasicBlock *Succ : BI->successors()) for (PHINode &Phi : Succ->phis()) Phis.insert(&Phi); + // Add the successor only if not previously visited. + Cases.emplace_back(SwitchSuccWrapper{BB, &PhiPredIVs}); } - Cases.emplace_back(SwitchSuccWrapper{I, BB, &PhiPredIVs}); + + BBToSuccessorIndexes[BB].emplace_back(I); } // Precompute a data structure to improve performance of isEqual for @@ -7627,7 +7629,9 @@ bool SimplifyCFGOpt::simplifyDuplicateSwitchArms(SwitchInst *SI, // We know that SI's parent BB no longer dominates the old case successor // since we are making it dead. Updates.push_back({DominatorTree::Delete, SI->getParent(), SSW.Dest}); - SI->setSuccessor(SSW.SuccNum, (*It)->Dest); + const auto &Successors = BBToSuccessorIndexes.at(SSW.Dest); + for (unsigned Idx : Successors) + SI->setSuccessor(Idx, (*It)->Dest); MadeChange = true; } } diff --git a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll index 7f9b7a33c3c6..7f484e2ec29d 100644 --- a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll +++ b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll @@ -320,14 +320,14 @@ define i32 @overflow(i32 %type) { ; CHECK-NEXT: i32 1, label [[IF_END:%.*]] ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]] ; CHECK-NEXT: ] -; CHECK: sw.bb1: -; CHECK-NEXT: br label [[SW_DEFAULT]] ; CHECK: sw.bb2: -; CHECK-NEXT: br label [[SW_DEFAULT]] +; CHECK-NEXT: br label [[IF_END]] ; CHECK: sw.bb3: -; CHECK-NEXT: br label [[SW_DEFAULT]] +; CHECK-NEXT: br label [[IF_END]] +; CHECK: sw.default: +; CHECK-NEXT: br label [[IF_END]] ; CHECK: if.end: -; CHECK-NEXT: [[DIRENT_TYPE_0:%.*]] = phi i32 [ 6, [[SW_BB3]] ], [ 5, [[SW_BB2]] ], [ 0, [[IF_END]] ], [ 3, [[ENTRY:%.*]] ] +; CHECK-NEXT: [[DIRENT_TYPE_0:%.*]] = phi i32 [ 3, [[SW_DEFAULT]] ], [ 6, [[SW_BB3]] ], [ 5, [[SW_BB2]] ], [ 0, [[ENTRY:%.*]] ] ; CHECK-NEXT: ret i32 [[DIRENT_TYPE_0]] ; entry: diff --git a/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll b/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll index b7660378f1e3..32581bbf8f14 100644 --- a/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll +++ b/llvm/test/Transforms/SimplifyCFG/switch-dup-bbs.ll @@ -136,17 +136,13 @@ define i32 @switch_dup_exit(i32 %val) { ; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]] ; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]] ; SIMPLIFY-CFG-NEXT: i32 22, label %[[BB1:.*]] -; SIMPLIFY-CFG-NEXT: i32 15, label %[[BB2:.*]] -; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB2]] ; SIMPLIFY-CFG-NEXT: ] ; SIMPLIFY-CFG: [[BB1]]: ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] -; SIMPLIFY-CFG: [[BB2]]: -; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] ; SIMPLIFY-CFG: [[DEFAULT]]: ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] ; SIMPLIFY-CFG: [[EXIT]]: -; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i32 [ 0, %[[DEFAULT]] ], [ 0, %[[BB2]] ], [ 3, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ] +; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i32 [ 0, %[[DEFAULT]] ], [ 3, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ] ; SIMPLIFY-CFG-NEXT: ret i32 [[RET]] ; entry: @@ -175,19 +171,11 @@ exit: define i64 @switch_dup_exit_2(i32 %val) { ; SIMPLIFY-CFG-LABEL: define i64 @switch_dup_exit_2( ; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) { -; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]: -; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [ -; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]] -; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]] -; SIMPLIFY-CFG-NEXT: i32 13, label %[[BB1:.*]] -; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB1]] -; SIMPLIFY-CFG-NEXT: ] -; SIMPLIFY-CFG: [[BB1]]: -; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] -; SIMPLIFY-CFG: [[DEFAULT]]: -; SIMPLIFY-CFG-NEXT: br label %[[EXIT]] -; SIMPLIFY-CFG: [[EXIT]]: -; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i64 [ 0, %[[DEFAULT]] ], [ 0, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ] +; SIMPLIFY-CFG-NEXT: [[ENTRY:.*:]] +; SIMPLIFY-CFG-NEXT: [[SWITCH_SELECTCMP_CASE1:%.*]] = icmp eq i32 [[VAL]], 1 +; SIMPLIFY-CFG-NEXT: [[SWITCH_SELECTCMP_CASE2:%.*]] = icmp eq i32 [[VAL]], 11 +; SIMPLIFY-CFG-NEXT: [[SWITCH_SELECTCMP:%.*]] = or i1 [[SWITCH_SELECTCMP_CASE1]], [[SWITCH_SELECTCMP_CASE2]] +; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = select i1 [[SWITCH_SELECTCMP]], i64 1, i64 0 ; SIMPLIFY-CFG-NEXT: ret i64 [[RET]] ; entry: -- cgit v1.2.3 From 1d070988d9172965dee227e5629fa886845b815f Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Fri, 13 Dec 2024 09:16:52 +0100 Subject: [WinEH] Take musttail calls into account when unlinking eh records (#119702) Exception handling records are unlinked on function return. However, if there is a musttail call before the return, that's the de-facto point of termination and the unlinking instructions must be inserted *before* that. Fixes #119255 --- llvm/lib/Target/X86/X86WinEHState.cpp | 5 ++++ llvm/test/CodeGen/WinEH/wineh-musttail-call.ll | 32 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 llvm/test/CodeGen/WinEH/wineh-musttail-call.ll diff --git a/llvm/lib/Target/X86/X86WinEHState.cpp b/llvm/lib/Target/X86/X86WinEHState.cpp index b3e4c70eb57f..35b7d7f508b0 100644 --- a/llvm/lib/Target/X86/X86WinEHState.cpp +++ b/llvm/lib/Target/X86/X86WinEHState.cpp @@ -363,6 +363,11 @@ void WinEHStatePass::emitExceptionRegistrationRecord(Function *F) { Instruction *T = BB.getTerminator(); if (!isa(T)) continue; + + // If there is a musttail call, that's the de-facto terminator. + if (CallInst *CI = BB.getTerminatingMustTailCall()) + T = CI; + Builder.SetInsertPoint(T); unlinkExceptionRegistration(Builder); } diff --git a/llvm/test/CodeGen/WinEH/wineh-musttail-call.ll b/llvm/test/CodeGen/WinEH/wineh-musttail-call.ll new file mode 100644 index 000000000000..7f508090a1bc --- /dev/null +++ b/llvm/test/CodeGen/WinEH/wineh-musttail-call.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s | FileCheck %s + +target triple = "i386-pc-windows-msvc" + +; Check that codegen doesn't fail due to wineh inserting instructions between +; the musttail call and return instruction. + + +define void @test() personality ptr @__CxxFrameHandler3 { +; CHECK-LABEL: test: + +entry: + invoke void @foo() to label %try.cont unwind label %catch.dispatch + +catch.dispatch: + %0 = catchswitch within none [label %catch] unwind to caller + +catch: + %1 = catchpad within %0 [ptr null, i32 64, ptr null] + catchret from %1 to label %try.cont + +try.cont: +; CHECK: movl %{{[a-z0-9]+}}, %fs:0 +; CHECK: jmp _bar + + musttail call void @bar() + ret void +} + +declare i32 @__CxxFrameHandler3(...) +declare void @foo() +declare void @bar() -- cgit v1.2.3 From 3d6b2d491209018918e4c881a0917bffc54cc0d9 Mon Sep 17 00:00:00 2001 From: David Green Date: Fri, 13 Dec 2024 08:39:45 +0000 Subject: [GlobalISel] Use replaceRegOrBuildCopy when legalizer-combining anyext(undef). (#119721) This just avoids the unnecessary creation of some COPY nodes created from the CSE builder. --- .../GlobalISel/LegalizationArtifactCombiner.h | 13 +- .../AArch64/GlobalISel/combine-ext-debugloc.mir | 2 +- .../AArch64/GlobalISel/legalize-build-vector.mir | 3 +- .../AArch64/GlobalISel/legalize-concat-vectors.mir | 8 +- .../AArch64/GlobalISel/legalize-inserts.mir | 186 +++++++-------------- 5 files changed, 74 insertions(+), 138 deletions(-) diff --git a/llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h b/llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h index 9dea4c1b412d..dcf392d64ac0 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h @@ -112,7 +112,7 @@ public: return true; } } - return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs); + return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs, Observer); } bool tryCombineZExt(MachineInstr &MI, @@ -187,7 +187,7 @@ public: return true; } } - return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs); + return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs, Observer); } bool tryCombineSExt(MachineInstr &MI, @@ -252,7 +252,7 @@ public: } } - return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs); + return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs, Observer); } bool tryCombineTrunc(MachineInstr &MI, @@ -376,7 +376,8 @@ public: /// Try to fold G_[ASZ]EXT (G_IMPLICIT_DEF). bool tryFoldImplicitDef(MachineInstr &MI, SmallVectorImpl &DeadInsts, - SmallVectorImpl &UpdatedDefs) { + SmallVectorImpl &UpdatedDefs, + GISelObserverWrapper &Observer) { unsigned Opcode = MI.getOpcode(); assert(Opcode == TargetOpcode::G_ANYEXT || Opcode == TargetOpcode::G_ZEXT || Opcode == TargetOpcode::G_SEXT); @@ -392,7 +393,9 @@ public: if (!isInstLegal({TargetOpcode::G_IMPLICIT_DEF, {DstTy}})) return false; LLVM_DEBUG(dbgs() << ".. Combine G_ANYEXT(G_IMPLICIT_DEF): " << MI;); - Builder.buildInstr(TargetOpcode::G_IMPLICIT_DEF, {DstReg}, {}); + auto Impl = Builder.buildUndef(DstTy); + replaceRegOrBuildCopy(DstReg, Impl.getReg(0), MRI, Builder, UpdatedDefs, + Observer); UpdatedDefs.push_back(DstReg); } else { // G_[SZ]EXT (G_IMPLICIT_DEF) -> G_CONSTANT 0 because the top diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/combine-ext-debugloc.mir b/llvm/test/CodeGen/AArch64/GlobalISel/combine-ext-debugloc.mir index 7296e10b4a61..e16faa6ba9e6 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/combine-ext-debugloc.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/combine-ext-debugloc.mir @@ -2,7 +2,7 @@ # Check that when we combine ZEXT/ANYEXT we assign the correct location. # CHECK: !8 = !DILocation(line: 23, column: 5, scope: !4) -# CHECK: G_AND %14, %15, debug-location !8 +# CHECK: G_AND %16, %15, debug-location !8 --- | target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-build-vector.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-build-vector.mir index a63d8b9c1377..6b9b08e2f9f4 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-build-vector.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-build-vector.mir @@ -141,8 +141,7 @@ body: | bb.0: ; CHECK-LABEL: name: widen_v2s8 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF - ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[DEF]](s32) + ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32) ; CHECK-NEXT: $d0 = COPY [[BUILD_VECTOR]](<2 x s32>) ; CHECK-NEXT: RET_ReallyLR %0:_(s8) = G_IMPLICIT_DEF diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-concat-vectors.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-concat-vectors.mir index 87bbbee35d6d..5527cbfb682b 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-concat-vectors.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-concat-vectors.mir @@ -75,10 +75,7 @@ body: | ; CHECK-NEXT: %b:_(s32) = G_LOAD %a(p0) :: (load (s32)) ; CHECK-NEXT: %c:_(<4 x s8>) = G_BITCAST %b(s32) ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF - ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY [[DEF]](s16) - ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY [[DEF]](s16) - ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY [[DEF]](s16) - ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[COPY]](s16), [[COPY1]](s16), [[COPY2]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16) + ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16) ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<8 x s8>) = G_TRUNC [[BUILD_VECTOR]](<8 x s16>) ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s8>), [[UV1:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[TRUNC]](<8 x s8>) ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST %c(<4 x s8>) @@ -113,8 +110,7 @@ body: | ; CHECK-NEXT: %b:_(s32) = G_LOAD %a(p0) :: (load (s32)) ; CHECK-NEXT: %c:_(<2 x s16>) = G_BITCAST %b(s32) ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF - ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32) + ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32) ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[BUILD_VECTOR]](<4 x s32>) ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[TRUNC]](<4 x s16>) ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST %c(<2 x s16>) diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-inserts.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-inserts.mir index 942bb60f5c06..eb9c3ff60c70 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-inserts.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-inserts.mir @@ -67,258 +67,196 @@ body: | ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x2 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF - ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 - ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]] + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C1]](s64) ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]] ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND1]], [[SHL]] - ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]] + ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND2]], [[C2]](s64) ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]] - ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C]] + ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 3 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C3]](s64) ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[OR1]], [[SHL2]] - ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C]] + ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 4 ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND4]], [[C4]](s64) ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[OR2]], [[SHL3]] - ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[COPY6]], [[C]] + ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 5 ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C5]](s64) ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[OR3]], [[SHL4]] - ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s32) = G_AND [[COPY7]], [[C]] + ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 6 ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[AND6]], [[C6]](s64) ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s32) = G_OR [[OR4]], [[SHL5]] - ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s32) = G_AND [[COPY8]], [[C]] + ; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 7 ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C7]](s64) ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s32) = G_OR [[OR5]], [[SHL6]] ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[OR6]](s32) - ; CHECK-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND8:%[0-9]+]]:_(s32) = G_AND [[COPY9]], [[C]] + ; CHECK-NEXT: [[AND8:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL7:%[0-9]+]]:_(s32) = G_SHL [[AND8]], [[C1]](s64) - ; CHECK-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND9:%[0-9]+]]:_(s32) = G_AND [[COPY10]], [[C]] + ; CHECK-NEXT: [[AND9:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(s32) = G_OR [[AND9]], [[SHL7]] - ; CHECK-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND10:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C]] + ; CHECK-NEXT: [[AND10:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL8:%[0-9]+]]:_(s32) = G_SHL [[AND10]], [[C2]](s64) ; CHECK-NEXT: [[OR8:%[0-9]+]]:_(s32) = G_OR [[OR7]], [[SHL8]] - ; CHECK-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND11:%[0-9]+]]:_(s32) = G_AND [[COPY12]], [[C]] + ; CHECK-NEXT: [[AND11:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL9:%[0-9]+]]:_(s32) = G_SHL [[AND11]], [[C3]](s64) ; CHECK-NEXT: [[OR9:%[0-9]+]]:_(s32) = G_OR [[OR8]], [[SHL9]] - ; CHECK-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND12:%[0-9]+]]:_(s32) = G_AND [[COPY13]], [[C]] + ; CHECK-NEXT: [[AND12:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL10:%[0-9]+]]:_(s32) = G_SHL [[AND12]], [[C4]](s64) ; CHECK-NEXT: [[OR10:%[0-9]+]]:_(s32) = G_OR [[OR9]], [[SHL10]] - ; CHECK-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND13:%[0-9]+]]:_(s32) = G_AND [[COPY14]], [[C]] + ; CHECK-NEXT: [[AND13:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL11:%[0-9]+]]:_(s32) = G_SHL [[AND13]], [[C5]](s64) ; CHECK-NEXT: [[OR11:%[0-9]+]]:_(s32) = G_OR [[OR10]], [[SHL11]] - ; CHECK-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND14:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C]] + ; CHECK-NEXT: [[AND14:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL12:%[0-9]+]]:_(s32) = G_SHL [[AND14]], [[C6]](s64) ; CHECK-NEXT: [[OR12:%[0-9]+]]:_(s32) = G_OR [[OR11]], [[SHL12]] - ; CHECK-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND15:%[0-9]+]]:_(s32) = G_AND [[COPY16]], [[C]] + ; CHECK-NEXT: [[AND15:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL13:%[0-9]+]]:_(s32) = G_SHL [[AND15]], [[C7]](s64) ; CHECK-NEXT: [[OR13:%[0-9]+]]:_(s32) = G_OR [[OR12]], [[SHL13]] ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[OR13]](s32) - ; CHECK-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND16:%[0-9]+]]:_(s32) = G_AND [[COPY17]], [[C]] + ; CHECK-NEXT: [[AND16:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL14:%[0-9]+]]:_(s32) = G_SHL [[AND16]], [[C1]](s64) - ; CHECK-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND17:%[0-9]+]]:_(s32) = G_AND [[COPY18]], [[C]] + ; CHECK-NEXT: [[AND17:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR14:%[0-9]+]]:_(s32) = G_OR [[AND17]], [[SHL14]] - ; CHECK-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND18:%[0-9]+]]:_(s32) = G_AND [[COPY19]], [[C]] + ; CHECK-NEXT: [[AND18:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL15:%[0-9]+]]:_(s32) = G_SHL [[AND18]], [[C2]](s64) ; CHECK-NEXT: [[OR15:%[0-9]+]]:_(s32) = G_OR [[OR14]], [[SHL15]] - ; CHECK-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND19:%[0-9]+]]:_(s32) = G_AND [[COPY20]], [[C]] + ; CHECK-NEXT: [[AND19:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL16:%[0-9]+]]:_(s32) = G_SHL [[AND19]], [[C3]](s64) ; CHECK-NEXT: [[OR16:%[0-9]+]]:_(s32) = G_OR [[OR15]], [[SHL16]] - ; CHECK-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND20:%[0-9]+]]:_(s32) = G_AND [[COPY21]], [[C]] + ; CHECK-NEXT: [[AND20:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL17:%[0-9]+]]:_(s32) = G_SHL [[AND20]], [[C4]](s64) ; CHECK-NEXT: [[OR17:%[0-9]+]]:_(s32) = G_OR [[OR16]], [[SHL17]] - ; CHECK-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND21:%[0-9]+]]:_(s32) = G_AND [[COPY22]], [[C]] + ; CHECK-NEXT: [[AND21:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL18:%[0-9]+]]:_(s32) = G_SHL [[AND21]], [[C5]](s64) ; CHECK-NEXT: [[OR18:%[0-9]+]]:_(s32) = G_OR [[OR17]], [[SHL18]] - ; CHECK-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND22:%[0-9]+]]:_(s32) = G_AND [[COPY23]], [[C]] + ; CHECK-NEXT: [[AND22:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL19:%[0-9]+]]:_(s32) = G_SHL [[AND22]], [[C6]](s64) ; CHECK-NEXT: [[OR19:%[0-9]+]]:_(s32) = G_OR [[OR18]], [[SHL19]] - ; CHECK-NEXT: [[COPY24:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND23:%[0-9]+]]:_(s32) = G_AND [[COPY24]], [[C]] + ; CHECK-NEXT: [[AND23:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL20:%[0-9]+]]:_(s32) = G_SHL [[AND23]], [[C7]](s64) ; CHECK-NEXT: [[OR20:%[0-9]+]]:_(s32) = G_OR [[OR19]], [[SHL20]] ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[OR20]](s32) - ; CHECK-NEXT: [[COPY25:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND24:%[0-9]+]]:_(s32) = G_AND [[COPY25]], [[C]] + ; CHECK-NEXT: [[AND24:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL21:%[0-9]+]]:_(s32) = G_SHL [[AND24]], [[C1]](s64) - ; CHECK-NEXT: [[COPY26:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND25:%[0-9]+]]:_(s32) = G_AND [[COPY26]], [[C]] + ; CHECK-NEXT: [[AND25:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR21:%[0-9]+]]:_(s32) = G_OR [[AND25]], [[SHL21]] - ; CHECK-NEXT: [[COPY27:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND26:%[0-9]+]]:_(s32) = G_AND [[COPY27]], [[C]] + ; CHECK-NEXT: [[AND26:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL22:%[0-9]+]]:_(s32) = G_SHL [[AND26]], [[C2]](s64) ; CHECK-NEXT: [[OR22:%[0-9]+]]:_(s32) = G_OR [[OR21]], [[SHL22]] - ; CHECK-NEXT: [[COPY28:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND27:%[0-9]+]]:_(s32) = G_AND [[COPY28]], [[C]] + ; CHECK-NEXT: [[AND27:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL23:%[0-9]+]]:_(s32) = G_SHL [[AND27]], [[C3]](s64) ; CHECK-NEXT: [[OR23:%[0-9]+]]:_(s32) = G_OR [[OR22]], [[SHL23]] - ; CHECK-NEXT: [[COPY29:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND28:%[0-9]+]]:_(s32) = G_AND [[COPY29]], [[C]] + ; CHECK-NEXT: [[AND28:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL24:%[0-9]+]]:_(s32) = G_SHL [[AND28]], [[C4]](s64) ; CHECK-NEXT: [[OR24:%[0-9]+]]:_(s32) = G_OR [[OR23]], [[SHL24]] - ; CHECK-NEXT: [[COPY30:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND29:%[0-9]+]]:_(s32) = G_AND [[COPY30]], [[C]] + ; CHECK-NEXT: [[AND29:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL25:%[0-9]+]]:_(s32) = G_SHL [[AND29]], [[C5]](s64) ; CHECK-NEXT: [[OR25:%[0-9]+]]:_(s32) = G_OR [[OR24]], [[SHL25]] - ; CHECK-NEXT: [[COPY31:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND30:%[0-9]+]]:_(s32) = G_AND [[COPY31]], [[C]] + ; CHECK-NEXT: [[AND30:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL26:%[0-9]+]]:_(s32) = G_SHL [[AND30]], [[C6]](s64) ; CHECK-NEXT: [[OR26:%[0-9]+]]:_(s32) = G_OR [[OR25]], [[SHL26]] - ; CHECK-NEXT: [[COPY32:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND31:%[0-9]+]]:_(s32) = G_AND [[COPY32]], [[C]] + ; CHECK-NEXT: [[AND31:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL27:%[0-9]+]]:_(s32) = G_SHL [[AND31]], [[C7]](s64) ; CHECK-NEXT: [[OR27:%[0-9]+]]:_(s32) = G_OR [[OR26]], [[SHL27]] ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[OR27]](s32) - ; CHECK-NEXT: [[COPY33:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND32:%[0-9]+]]:_(s32) = G_AND [[COPY33]], [[C]] + ; CHECK-NEXT: [[AND32:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL28:%[0-9]+]]:_(s32) = G_SHL [[AND32]], [[C1]](s64) - ; CHECK-NEXT: [[COPY34:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND33:%[0-9]+]]:_(s32) = G_AND [[COPY34]], [[C]] + ; CHECK-NEXT: [[AND33:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR28:%[0-9]+]]:_(s32) = G_OR [[AND33]], [[SHL28]] - ; CHECK-NEXT: [[COPY35:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND34:%[0-9]+]]:_(s32) = G_AND [[COPY35]], [[C]] + ; CHECK-NEXT: [[AND34:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL29:%[0-9]+]]:_(s32) = G_SHL [[AND34]], [[C2]](s64) ; CHECK-NEXT: [[OR29:%[0-9]+]]:_(s32) = G_OR [[OR28]], [[SHL29]] - ; CHECK-NEXT: [[COPY36:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND35:%[0-9]+]]:_(s32) = G_AND [[COPY36]], [[C]] + ; CHECK-NEXT: [[AND35:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL30:%[0-9]+]]:_(s32) = G_SHL [[AND35]], [[C3]](s64) ; CHECK-NEXT: [[OR30:%[0-9]+]]:_(s32) = G_OR [[OR29]], [[SHL30]] - ; CHECK-NEXT: [[COPY37:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND36:%[0-9]+]]:_(s32) = G_AND [[COPY37]], [[C]] + ; CHECK-NEXT: [[AND36:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL31:%[0-9]+]]:_(s32) = G_SHL [[AND36]], [[C4]](s64) ; CHECK-NEXT: [[OR31:%[0-9]+]]:_(s32) = G_OR [[OR30]], [[SHL31]] - ; CHECK-NEXT: [[COPY38:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND37:%[0-9]+]]:_(s32) = G_AND [[COPY38]], [[C]] + ; CHECK-NEXT: [[AND37:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL32:%[0-9]+]]:_(s32) = G_SHL [[AND37]], [[C5]](s64) ; CHECK-NEXT: [[OR32:%[0-9]+]]:_(s32) = G_OR [[OR31]], [[SHL32]] - ; CHECK-NEXT: [[COPY39:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND38:%[0-9]+]]:_(s32) = G_AND [[COPY39]], [[C]] + ; CHECK-NEXT: [[AND38:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL33:%[0-9]+]]:_(s32) = G_SHL [[AND38]], [[C6]](s64) ; CHECK-NEXT: [[OR33:%[0-9]+]]:_(s32) = G_OR [[OR32]], [[SHL33]] - ; CHECK-NEXT: [[COPY40:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND39:%[0-9]+]]:_(s32) = G_AND [[COPY40]], [[C]] + ; CHECK-NEXT: [[AND39:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL34:%[0-9]+]]:_(s32) = G_SHL [[AND39]], [[C7]](s64) ; CHECK-NEXT: [[OR34:%[0-9]+]]:_(s32) = G_OR [[OR33]], [[SHL34]] ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[OR34]](s32) - ; CHECK-NEXT: [[COPY41:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND40:%[0-9]+]]:_(s32) = G_AND [[COPY41]], [[C]] + ; CHECK-NEXT: [[AND40:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL35:%[0-9]+]]:_(s32) = G_SHL [[AND40]], [[C1]](s64) - ; CHECK-NEXT: [[COPY42:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND41:%[0-9]+]]:_(s32) = G_AND [[COPY42]], [[C]] + ; CHECK-NEXT: [[AND41:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR35:%[0-9]+]]:_(s32) = G_OR [[AND41]], [[SHL35]] - ; CHECK-NEXT: [[COPY43:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND42:%[0-9]+]]:_(s32) = G_AND [[COPY43]], [[C]] + ; CHECK-NEXT: [[AND42:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL36:%[0-9]+]]:_(s32) = G_SHL [[AND42]], [[C2]](s64) ; CHECK-NEXT: [[OR36:%[0-9]+]]:_(s32) = G_OR [[OR35]], [[SHL36]] - ; CHECK-NEXT: [[COPY44:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND43:%[0-9]+]]:_(s32) = G_AND [[COPY44]], [[C]] + ; CHECK-NEXT: [[AND43:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL37:%[0-9]+]]:_(s32) = G_SHL [[AND43]], [[C3]](s64) ; CHECK-NEXT: [[OR37:%[0-9]+]]:_(s32) = G_OR [[OR36]], [[SHL37]] - ; CHECK-NEXT: [[COPY45:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND44:%[0-9]+]]:_(s32) = G_AND [[COPY45]], [[C]] + ; CHECK-NEXT: [[AND44:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL38:%[0-9]+]]:_(s32) = G_SHL [[AND44]], [[C4]](s64) ; CHECK-NEXT: [[OR38:%[0-9]+]]:_(s32) = G_OR [[OR37]], [[SHL38]] - ; CHECK-NEXT: [[COPY46:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND45:%[0-9]+]]:_(s32) = G_AND [[COPY46]], [[C]] + ; CHECK-NEXT: [[AND45:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL39:%[0-9]+]]:_(s32) = G_SHL [[AND45]], [[C5]](s64) ; CHECK-NEXT: [[OR39:%[0-9]+]]:_(s32) = G_OR [[OR38]], [[SHL39]] - ; CHECK-NEXT: [[COPY47:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND46:%[0-9]+]]:_(s32) = G_AND [[COPY47]], [[C]] + ; CHECK-NEXT: [[AND46:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL40:%[0-9]+]]:_(s32) = G_SHL [[AND46]], [[C6]](s64) ; CHECK-NEXT: [[OR40:%[0-9]+]]:_(s32) = G_OR [[OR39]], [[SHL40]] - ; CHECK-NEXT: [[COPY48:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND47:%[0-9]+]]:_(s32) = G_AND [[COPY48]], [[C]] + ; CHECK-NEXT: [[AND47:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL41:%[0-9]+]]:_(s32) = G_SHL [[AND47]], [[C7]](s64) ; CHECK-NEXT: [[OR41:%[0-9]+]]:_(s32) = G_OR [[OR40]], [[SHL41]] ; CHECK-NEXT: [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[OR41]](s32) - ; CHECK-NEXT: [[COPY49:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND48:%[0-9]+]]:_(s32) = G_AND [[COPY49]], [[C]] + ; CHECK-NEXT: [[AND48:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL42:%[0-9]+]]:_(s32) = G_SHL [[AND48]], [[C1]](s64) - ; CHECK-NEXT: [[COPY50:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND49:%[0-9]+]]:_(s32) = G_AND [[COPY50]], [[C]] + ; CHECK-NEXT: [[AND49:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR42:%[0-9]+]]:_(s32) = G_OR [[AND49]], [[SHL42]] - ; CHECK-NEXT: [[COPY51:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND50:%[0-9]+]]:_(s32) = G_AND [[COPY51]], [[C]] + ; CHECK-NEXT: [[AND50:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL43:%[0-9]+]]:_(s32) = G_SHL [[AND50]], [[C2]](s64) ; CHECK-NEXT: [[OR43:%[0-9]+]]:_(s32) = G_OR [[OR42]], [[SHL43]] - ; CHECK-NEXT: [[COPY52:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND51:%[0-9]+]]:_(s32) = G_AND [[COPY52]], [[C]] + ; CHECK-NEXT: [[AND51:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL44:%[0-9]+]]:_(s32) = G_SHL [[AND51]], [[C3]](s64) ; CHECK-NEXT: [[OR44:%[0-9]+]]:_(s32) = G_OR [[OR43]], [[SHL44]] - ; CHECK-NEXT: [[COPY53:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND52:%[0-9]+]]:_(s32) = G_AND [[COPY53]], [[C]] + ; CHECK-NEXT: [[AND52:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL45:%[0-9]+]]:_(s32) = G_SHL [[AND52]], [[C4]](s64) ; CHECK-NEXT: [[OR45:%[0-9]+]]:_(s32) = G_OR [[OR44]], [[SHL45]] - ; CHECK-NEXT: [[COPY54:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND53:%[0-9]+]]:_(s32) = G_AND [[COPY54]], [[C]] + ; CHECK-NEXT: [[AND53:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL46:%[0-9]+]]:_(s32) = G_SHL [[AND53]], [[C5]](s64) ; CHECK-NEXT: [[OR46:%[0-9]+]]:_(s32) = G_OR [[OR45]], [[SHL46]] - ; CHECK-NEXT: [[COPY55:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND54:%[0-9]+]]:_(s32) = G_AND [[COPY55]], [[C]] + ; CHECK-NEXT: [[AND54:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL47:%[0-9]+]]:_(s32) = G_SHL [[AND54]], [[C6]](s64) ; CHECK-NEXT: [[OR47:%[0-9]+]]:_(s32) = G_OR [[OR46]], [[SHL47]] - ; CHECK-NEXT: [[COPY56:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND55:%[0-9]+]]:_(s32) = G_AND [[COPY56]], [[C]] + ; CHECK-NEXT: [[AND55:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL48:%[0-9]+]]:_(s32) = G_SHL [[AND55]], [[C7]](s64) ; CHECK-NEXT: [[OR48:%[0-9]+]]:_(s32) = G_OR [[OR47]], [[SHL48]] ; CHECK-NEXT: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[OR48]](s32) ; CHECK-NEXT: [[AND56:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL49:%[0-9]+]]:_(s32) = G_SHL [[AND56]], [[C1]](s64) - ; CHECK-NEXT: [[COPY57:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND57:%[0-9]+]]:_(s32) = G_AND [[COPY57]], [[C]] + ; CHECK-NEXT: [[AND57:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[OR49:%[0-9]+]]:_(s32) = G_OR [[AND57]], [[SHL49]] - ; CHECK-NEXT: [[COPY58:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND58:%[0-9]+]]:_(s32) = G_AND [[COPY58]], [[C]] + ; CHECK-NEXT: [[AND58:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL50:%[0-9]+]]:_(s32) = G_SHL [[AND58]], [[C2]](s64) ; CHECK-NEXT: [[OR50:%[0-9]+]]:_(s32) = G_OR [[OR49]], [[SHL50]] - ; CHECK-NEXT: [[COPY59:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND59:%[0-9]+]]:_(s32) = G_AND [[COPY59]], [[C]] + ; CHECK-NEXT: [[AND59:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL51:%[0-9]+]]:_(s32) = G_SHL [[AND59]], [[C3]](s64) ; CHECK-NEXT: [[OR51:%[0-9]+]]:_(s32) = G_OR [[OR50]], [[SHL51]] - ; CHECK-NEXT: [[COPY60:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND60:%[0-9]+]]:_(s32) = G_AND [[COPY60]], [[C]] + ; CHECK-NEXT: [[AND60:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL52:%[0-9]+]]:_(s32) = G_SHL [[AND60]], [[C4]](s64) ; CHECK-NEXT: [[OR52:%[0-9]+]]:_(s32) = G_OR [[OR51]], [[SHL52]] - ; CHECK-NEXT: [[COPY61:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND61:%[0-9]+]]:_(s32) = G_AND [[COPY61]], [[C]] + ; CHECK-NEXT: [[AND61:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL53:%[0-9]+]]:_(s32) = G_SHL [[AND61]], [[C5]](s64) ; CHECK-NEXT: [[OR53:%[0-9]+]]:_(s32) = G_OR [[OR52]], [[SHL53]] - ; CHECK-NEXT: [[COPY62:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND62:%[0-9]+]]:_(s32) = G_AND [[COPY62]], [[C]] + ; CHECK-NEXT: [[AND62:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL54:%[0-9]+]]:_(s32) = G_SHL [[AND62]], [[C6]](s64) ; CHECK-NEXT: [[OR54:%[0-9]+]]:_(s32) = G_OR [[OR53]], [[SHL54]] - ; CHECK-NEXT: [[COPY63:%[0-9]+]]:_(s32) = COPY [[DEF]](s32) - ; CHECK-NEXT: [[AND63:%[0-9]+]]:_(s32) = G_AND [[COPY63]], [[C]] + ; CHECK-NEXT: [[AND63:%[0-9]+]]:_(s32) = G_AND [[DEF]], [[C]] ; CHECK-NEXT: [[SHL55:%[0-9]+]]:_(s32) = G_SHL [[AND63]], [[C7]](s64) ; CHECK-NEXT: [[OR55:%[0-9]+]]:_(s32) = G_OR [[OR54]], [[SHL55]] ; CHECK-NEXT: [[TRUNC8:%[0-9]+]]:_(s8) = G_TRUNC [[OR55]](s32) -- cgit v1.2.3 From 06789ccb1695214f787cd471a300522973d33375 Mon Sep 17 00:00:00 2001 From: Fraser Cormack Date: Fri, 13 Dec 2024 08:47:13 +0000 Subject: [libclc] Optimize ceil/fabs/floor/rint/trunc (#119596) These functions all map to the corresponding LLVM intrinsics, but the vector intrinsics weren't being generated. The intrinsic mapping from CLC vector function to vector intrinsic was working correctly, but the mapping from OpenCL builtin to CLC function was suboptimally recursively splitting vectors in halves. For example, with this change, `ceil(float16)` calls `llvm.ceil.v16f32` directly once optimizations are applied. Now also, instead of generating LLVM intrinsics through `__asm` we now call clang elementwise builtins for each CLC builtin. This should be a more standard way of achieving the same result The CLC versions of each of these builtins are also now built and enabled for SPIR-V targets. The LLVM -> SPIR-V translator maps the intrinsics to the appropriate OpExtInst, so there should be no difference in semantics, despite the newly introduced indirection from OpenCL builtin through the CLC builtin to the intrinsic. The AMDGPU targets make use of the same `_CLC_DEFINE_UNARY_BUILTIN` macro to override `sqrt`, so those functions also appear more optimal with this change, calling the vector `llvm.sqrt.vXf32` intrinsics directly. --- libclc/clc/include/clc/clcmacro.h | 16 +++++++++++++++- libclc/clc/include/clc/math/clc_ceil.h | 15 ++++----------- libclc/clc/include/clc/math/clc_fabs.h | 15 ++++----------- libclc/clc/include/clc/math/clc_floor.h | 15 ++++----------- libclc/clc/include/clc/math/clc_rint.h | 15 ++++----------- libclc/clc/include/clc/math/clc_trunc.h | 15 ++++----------- libclc/clc/include/clc/math/unary_builtin.inc | 24 ++++++++++++++++++++++++ libclc/clc/lib/clspv/SOURCES | 6 +++++- libclc/clc/lib/clspv/dummy.cl | 1 - libclc/clc/lib/generic/SOURCES | 5 +++++ libclc/clc/lib/generic/math/clc_ceil.cl | 6 ++++++ libclc/clc/lib/generic/math/clc_fabs.cl | 6 ++++++ libclc/clc/lib/generic/math/clc_floor.cl | 6 ++++++ libclc/clc/lib/generic/math/clc_rint.cl | 6 ++++++ libclc/clc/lib/generic/math/clc_trunc.cl | 6 ++++++ libclc/clc/lib/spirv/SOURCES | 6 +++++- libclc/clc/lib/spirv64/SOURCES | 5 +++++ libclc/generic/lib/math/ceil.cl | 2 +- libclc/generic/lib/math/fabs.cl | 2 +- libclc/generic/lib/math/floor.cl | 2 +- libclc/generic/lib/math/rint.cl | 2 +- libclc/generic/lib/math/round.cl | 2 +- libclc/generic/lib/math/sqrt.cl | 2 +- libclc/generic/lib/math/trunc.cl | 2 +- libclc/generic/lib/math/unary_builtin.inc | 24 ------------------------ 25 files changed, 116 insertions(+), 90 deletions(-) create mode 100644 libclc/clc/include/clc/math/unary_builtin.inc delete mode 100644 libclc/clc/lib/clspv/dummy.cl create mode 100644 libclc/clc/lib/generic/math/clc_ceil.cl create mode 100644 libclc/clc/lib/generic/math/clc_fabs.cl create mode 100644 libclc/clc/lib/generic/math/clc_floor.cl create mode 100644 libclc/clc/lib/generic/math/clc_rint.cl create mode 100644 libclc/clc/lib/generic/math/clc_trunc.cl delete mode 100644 libclc/generic/lib/math/unary_builtin.inc diff --git a/libclc/clc/include/clc/clcmacro.h b/libclc/clc/include/clc/clcmacro.h index 244239284eca..c6583749eca6 100644 --- a/libclc/clc/include/clc/clcmacro.h +++ b/libclc/clc/include/clc/clcmacro.h @@ -191,7 +191,21 @@ #define _CLC_DEFINE_UNARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE) \ _CLC_DEF _CLC_OVERLOAD RET_TYPE FUNCTION(ARG1_TYPE x) { return BUILTIN(x); } \ - _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE) + _CLC_DEF _CLC_OVERLOAD RET_TYPE##2 FUNCTION(ARG1_TYPE##2 x) { \ + return BUILTIN(x); \ + } \ + _CLC_DEF _CLC_OVERLOAD RET_TYPE##3 FUNCTION(ARG1_TYPE##3 x) { \ + return BUILTIN(x); \ + } \ + _CLC_DEF _CLC_OVERLOAD RET_TYPE##4 FUNCTION(ARG1_TYPE##4 x) { \ + return BUILTIN(x); \ + } \ + _CLC_DEF _CLC_OVERLOAD RET_TYPE##8 FUNCTION(ARG1_TYPE##8 x) { \ + return BUILTIN(x); \ + } \ + _CLC_DEF _CLC_OVERLOAD RET_TYPE##16 FUNCTION(ARG1_TYPE##16 x) { \ + return BUILTIN(x); \ + } #ifdef cl_khr_fp16 diff --git a/libclc/clc/include/clc/math/clc_ceil.h b/libclc/clc/include/clc/math/clc_ceil.h index 66590687c342..20adc6d81d86 100644 --- a/libclc/clc/include/clc/math/clc_ceil.h +++ b/libclc/clc/include/clc/math/clc_ceil.h @@ -1,19 +1,12 @@ #ifndef __CLC_MATH_CLC_CEIL_H__ #define __CLC_MATH_CLC_CEIL_H__ -#if defined(CLC_CLSPV) || defined(CLC_SPIRV) -// clspv and spir-v targets provide their own OpenCL-compatible ceil -#define __clc_ceil ceil -#else - -// Map the function to an LLVM intrinsic +#define __CLC_BODY #define __CLC_FUNCTION __clc_ceil -#define __CLC_INTRINSIC "llvm.ceil" -#include -#undef __CLC_INTRINSIC -#undef __CLC_FUNCTION +#include -#endif +#undef __CLC_BODY +#undef __CLC_FUNCTION #endif // __CLC_MATH_CLC_CEIL_H__ diff --git a/libclc/clc/include/clc/math/clc_fabs.h b/libclc/clc/include/clc/math/clc_fabs.h index 93367b573137..911d34f78c7d 100644 --- a/libclc/clc/include/clc/math/clc_fabs.h +++ b/libclc/clc/include/clc/math/clc_fabs.h @@ -1,19 +1,12 @@ #ifndef __CLC_MATH_CLC_FABS_H__ #define __CLC_MATH_CLC_FABS_H__ -#if defined(CLC_CLSPV) || defined(CLC_SPIRV) -// clspv and spir-v targets provide their own OpenCL-compatible fabs -#define __clc_fabs fabs -#else - -// Map the function to an LLVM intrinsic +#define __CLC_BODY #define __CLC_FUNCTION __clc_fabs -#define __CLC_INTRINSIC "llvm.fabs" -#include -#undef __CLC_INTRINSIC -#undef __CLC_FUNCTION +#include -#endif +#undef __CLC_BODY +#undef __CLC_FUNCTION #endif // __CLC_MATH_CLC_FABS_H__ diff --git a/libclc/clc/include/clc/math/clc_floor.h b/libclc/clc/include/clc/math/clc_floor.h index 9919872ec633..c311cc0edae1 100644 --- a/libclc/clc/include/clc/math/clc_floor.h +++ b/libclc/clc/include/clc/math/clc_floor.h @@ -1,19 +1,12 @@ #ifndef __CLC_MATH_CLC_FLOOR_H__ #define __CLC_MATH_CLC_FLOOR_H__ -#if defined(CLC_CLSPV) || defined(CLC_SPIRV) -// clspv and spir-v targets provide their own OpenCL-compatible floor -#define __clc_floor floor -#else - -// Map the function to an LLVM intrinsic +#define __CLC_BODY #define __CLC_FUNCTION __clc_floor -#define __CLC_INTRINSIC "llvm.floor" -#include -#undef __CLC_INTRINSIC -#undef __CLC_FUNCTION +#include -#endif +#undef __CLC_BODY +#undef __CLC_FUNCTION #endif // __CLC_MATH_CLC_FLOOR_H__ diff --git a/libclc/clc/include/clc/math/clc_rint.h b/libclc/clc/include/clc/math/clc_rint.h index 3761407ad326..6faeed0b5696 100644 --- a/libclc/clc/include/clc/math/clc_rint.h +++ b/libclc/clc/include/clc/math/clc_rint.h @@ -1,19 +1,12 @@ #ifndef __CLC_MATH_CLC_RINT_H__ #define __CLC_MATH_CLC_RINT_H__ -#if defined(CLC_CLSPV) || defined(CLC_SPIRV) -// clspv and spir-v targets provide their own OpenCL-compatible rint -#define __clc_rint rint -#else - -// Map the function to an LLVM intrinsic +#define __CLC_BODY #define __CLC_FUNCTION __clc_rint -#define __CLC_INTRINSIC "llvm.rint" -#include -#undef __CLC_INTRINSIC -#undef __CLC_FUNCTION +#include -#endif +#undef __CLC_BODY +#undef __CLC_FUNCTION #endif // __CLC_MATH_CLC_RINT_H__ diff --git a/libclc/clc/include/clc/math/clc_trunc.h b/libclc/clc/include/clc/math/clc_trunc.h index c78c8899d852..acfc9d5db481 100644 --- a/libclc/clc/include/clc/math/clc_trunc.h +++ b/libclc/clc/include/clc/math/clc_trunc.h @@ -1,19 +1,12 @@ #ifndef __CLC_MATH_CLC_TRUNC_H__ #define __CLC_MATH_CLC_TRUNC_H__ -#if defined(CLC_CLSPV) || defined(CLC_SPIRV) -// clspv and spir-v targets provide their own OpenCL-compatible trunc -#define __clc_trunc trunc -#else - -// Map the function to an LLVM intrinsic +#define __CLC_BODY #define __CLC_FUNCTION __clc_trunc -#define __CLC_INTRINSIC "llvm.trunc" -#include -#undef __CLC_INTRINSIC -#undef __CLC_FUNCTION +#include -#endif +#undef __CLC_BODY +#undef __CLC_FUNCTION #endif // __CLC_MATH_CLC_TRUNC_H__ diff --git a/libclc/clc/include/clc/math/unary_builtin.inc b/libclc/clc/include/clc/math/unary_builtin.inc new file mode 100644 index 000000000000..6405c3fb32f8 --- /dev/null +++ b/libclc/clc/include/clc/math/unary_builtin.inc @@ -0,0 +1,24 @@ +#include +#include + +#ifndef __CLC_BUILTIN +#define __CLC_BUILTIN __CLC_XCONCAT(__clc_, __CLC_FUNCTION) +#endif + +_CLC_DEFINE_UNARY_BUILTIN(float, __CLC_FUNCTION, __CLC_BUILTIN, float) + +#ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +_CLC_DEFINE_UNARY_BUILTIN(double, __CLC_FUNCTION, __CLC_BUILTIN, double) + +#endif + +#ifdef cl_khr_fp16 + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +_CLC_DEFINE_UNARY_BUILTIN(half, __CLC_FUNCTION, __CLC_BUILTIN, half) + +#endif diff --git a/libclc/clc/lib/clspv/SOURCES b/libclc/clc/lib/clspv/SOURCES index 75a3130357c3..393e8d773cda 100644 --- a/libclc/clc/lib/clspv/SOURCES +++ b/libclc/clc/lib/clspv/SOURCES @@ -1 +1,5 @@ -dummy.cl +../generic/math/clc_ceil.cl +../generic/math/clc_fabs.cl +../generic/math/clc_floor.cl +../generic/math/clc_rint.cl +../generic/math/clc_trunc.cl diff --git a/libclc/clc/lib/clspv/dummy.cl b/libclc/clc/lib/clspv/dummy.cl deleted file mode 100644 index fab17ac780e3..000000000000 --- a/libclc/clc/lib/clspv/dummy.cl +++ /dev/null @@ -1 +0,0 @@ -// Empty file diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index d7ffaaf6dc3f..3916ea15f5c4 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -1,6 +1,11 @@ geometric/clc_dot.cl integer/clc_abs.cl integer/clc_abs_diff.cl +math/clc_ceil.cl +math/clc_fabs.cl +math/clc_floor.cl +math/clc_rint.cl +math/clc_trunc.cl relational/clc_all.cl relational/clc_any.cl relational/clc_bitselect.cl diff --git a/libclc/clc/lib/generic/math/clc_ceil.cl b/libclc/clc/lib/generic/math/clc_ceil.cl new file mode 100644 index 000000000000..c712e5fd024d --- /dev/null +++ b/libclc/clc/lib/generic/math/clc_ceil.cl @@ -0,0 +1,6 @@ +#include + +#undef __CLC_FUNCTION +#define __CLC_FUNCTION __clc_ceil +#define __CLC_BUILTIN __builtin_elementwise_ceil +#include diff --git a/libclc/clc/lib/generic/math/clc_fabs.cl b/libclc/clc/lib/generic/math/clc_fabs.cl new file mode 100644 index 000000000000..23ff3a7a187e --- /dev/null +++ b/libclc/clc/lib/generic/math/clc_fabs.cl @@ -0,0 +1,6 @@ +#include + +#undef __CLC_FUNCTION +#define __CLC_FUNCTION __clc_fabs +#define __CLC_BUILTIN __builtin_elementwise_abs +#include diff --git a/libclc/clc/lib/generic/math/clc_floor.cl b/libclc/clc/lib/generic/math/clc_floor.cl new file mode 100644 index 000000000000..98345c768f22 --- /dev/null +++ b/libclc/clc/lib/generic/math/clc_floor.cl @@ -0,0 +1,6 @@ +#include + +#undef __CLC_FUNCTION +#define __CLC_FUNCTION __clc_floor +#define __CLC_BUILTIN __builtin_elementwise_floor +#include diff --git a/libclc/clc/lib/generic/math/clc_rint.cl b/libclc/clc/lib/generic/math/clc_rint.cl new file mode 100644 index 000000000000..28ad321a7b4f --- /dev/null +++ b/libclc/clc/lib/generic/math/clc_rint.cl @@ -0,0 +1,6 @@ +#include + +#undef __CLC_FUNCTION +#define __CLC_FUNCTION __clc_rint +#define __CLC_BUILTIN __builtin_elementwise_rint +#include diff --git a/libclc/clc/lib/generic/math/clc_trunc.cl b/libclc/clc/lib/generic/math/clc_trunc.cl new file mode 100644 index 000000000000..e62ae062e050 --- /dev/null +++ b/libclc/clc/lib/generic/math/clc_trunc.cl @@ -0,0 +1,6 @@ +#include + +#undef __CLC_FUNCTION +#define __CLC_FUNCTION __clc_trunc +#define __CLC_BUILTIN __builtin_elementwise_trunc +#include diff --git a/libclc/clc/lib/spirv/SOURCES b/libclc/clc/lib/spirv/SOURCES index d8effd19613c..3b29fa0a9162 100644 --- a/libclc/clc/lib/spirv/SOURCES +++ b/libclc/clc/lib/spirv/SOURCES @@ -1,2 +1,6 @@ ../generic/geometric/clc_dot.cl - +../generic/math/clc_ceil.cl +../generic/math/clc_fabs.cl +../generic/math/clc_floor.cl +../generic/math/clc_rint.cl +../generic/math/clc_trunc.cl diff --git a/libclc/clc/lib/spirv64/SOURCES b/libclc/clc/lib/spirv64/SOURCES index 9200810ace38..3b29fa0a9162 100644 --- a/libclc/clc/lib/spirv64/SOURCES +++ b/libclc/clc/lib/spirv64/SOURCES @@ -1 +1,6 @@ ../generic/geometric/clc_dot.cl +../generic/math/clc_ceil.cl +../generic/math/clc_fabs.cl +../generic/math/clc_floor.cl +../generic/math/clc_rint.cl +../generic/math/clc_trunc.cl diff --git a/libclc/generic/lib/math/ceil.cl b/libclc/generic/lib/math/ceil.cl index e02789e694e0..8df864a06314 100644 --- a/libclc/generic/lib/math/ceil.cl +++ b/libclc/generic/lib/math/ceil.cl @@ -4,4 +4,4 @@ #undef __CLC_FUNCTION #define __CLC_FUNCTION ceil -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/fabs.cl b/libclc/generic/lib/math/fabs.cl index 9644369d4a09..55701cb36a95 100644 --- a/libclc/generic/lib/math/fabs.cl +++ b/libclc/generic/lib/math/fabs.cl @@ -4,4 +4,4 @@ #undef __CLC_FUNCTION #define __CLC_FUNCTION fabs -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/floor.cl b/libclc/generic/lib/math/floor.cl index f5c36b73862a..0854fa7efc45 100644 --- a/libclc/generic/lib/math/floor.cl +++ b/libclc/generic/lib/math/floor.cl @@ -4,4 +4,4 @@ #undef __CLC_FUNCTION #define __CLC_FUNCTION floor -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/rint.cl b/libclc/generic/lib/math/rint.cl index 185bbbbf8c91..ecf7d5c1e6dd 100644 --- a/libclc/generic/lib/math/rint.cl +++ b/libclc/generic/lib/math/rint.cl @@ -3,4 +3,4 @@ #undef __CLC_FUNCTION #define __CLC_FUNCTION rint -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/round.cl b/libclc/generic/lib/math/round.cl index 285328aaa5d5..6344051820c7 100644 --- a/libclc/generic/lib/math/round.cl +++ b/libclc/generic/lib/math/round.cl @@ -7,4 +7,4 @@ #undef __CLC_FUNCTION #define __CLC_FUNCTION round -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/sqrt.cl b/libclc/generic/lib/math/sqrt.cl index 8df25dd45adb..a9192a9493d1 100644 --- a/libclc/generic/lib/math/sqrt.cl +++ b/libclc/generic/lib/math/sqrt.cl @@ -24,4 +24,4 @@ #include "math/clc_sqrt.h" #define __CLC_FUNCTION sqrt -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/trunc.cl b/libclc/generic/lib/math/trunc.cl index 00c2a4a80015..1d5f04a32305 100644 --- a/libclc/generic/lib/math/trunc.cl +++ b/libclc/generic/lib/math/trunc.cl @@ -3,4 +3,4 @@ #undef __CLC_FUNCTION #define __CLC_FUNCTION trunc -#include "unary_builtin.inc" +#include diff --git a/libclc/generic/lib/math/unary_builtin.inc b/libclc/generic/lib/math/unary_builtin.inc deleted file mode 100644 index 6405c3fb32f8..000000000000 --- a/libclc/generic/lib/math/unary_builtin.inc +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include - -#ifndef __CLC_BUILTIN -#define __CLC_BUILTIN __CLC_XCONCAT(__clc_, __CLC_FUNCTION) -#endif - -_CLC_DEFINE_UNARY_BUILTIN(float, __CLC_FUNCTION, __CLC_BUILTIN, float) - -#ifdef cl_khr_fp64 - -#pragma OPENCL EXTENSION cl_khr_fp64 : enable - -_CLC_DEFINE_UNARY_BUILTIN(double, __CLC_FUNCTION, __CLC_BUILTIN, double) - -#endif - -#ifdef cl_khr_fp16 - -#pragma OPENCL EXTENSION cl_khr_fp16 : enable - -_CLC_DEFINE_UNARY_BUILTIN(half, __CLC_FUNCTION, __CLC_BUILTIN, half) - -#endif -- cgit v1.2.3 From 4c597d42dca13220c19661a021a11e28e2af801b Mon Sep 17 00:00:00 2001 From: Adam Siemieniuk Date: Fri, 13 Dec 2024 10:01:13 +0100 Subject: [mlir][xegpu] Support boundary checks only for block instructions (#119380) Constrains Vector lowering to apply boundary checks only to data transfers operating on block shapes. This further aligns lowering with the current Xe instructions' restrictions. --- mlir/lib/Conversion/VectorToXeGPU/VectorToXeGPU.cpp | 19 ++++++++++++++----- mlir/test/Conversion/VectorToXeGPU/load-to-xegpu.mlir | 2 +- .../test/Conversion/VectorToXeGPU/store-to-xegpu.mlir | 2 +- .../VectorToXeGPU/transfer-read-to-xegpu.mlir | 13 +++++++++++++ .../VectorToXeGPU/transfer-write-to-xegpu.mlir | 13 +++++++++++++ 5 files changed, 42 insertions(+), 7 deletions(-) diff --git a/mlir/lib/Conversion/VectorToXeGPU/VectorToXeGPU.cpp b/mlir/lib/Conversion/VectorToXeGPU/VectorToXeGPU.cpp index 215e1b1b8745..1232d8795d4d 100644 --- a/mlir/lib/Conversion/VectorToXeGPU/VectorToXeGPU.cpp +++ b/mlir/lib/Conversion/VectorToXeGPU/VectorToXeGPU.cpp @@ -82,6 +82,10 @@ static LogicalResult transferPreconditions(PatternRewriter &rewriter, xferOp, "Buffer must be contiguous in the innermost dimension"); unsigned vecRank = vecTy.getRank(); + if (xferOp.hasOutOfBoundsDim() && vecRank < 2) + return rewriter.notifyMatchFailure( + xferOp, "Boundary check is available only for block instructions."); + AffineMap map = xferOp.getPermutationMap(); if (!map.isProjectedPermutation(/*allowZeroInResults=*/false)) return rewriter.notifyMatchFailure(xferOp, "Unsupported permutation map"); @@ -255,9 +259,12 @@ struct LoadLowering : public OpRewritePattern { if (failed(storeLoadPreconditions(rewriter, loadOp, vecTy))) return failure(); + // Boundary check is available only for block instructions. + bool boundaryCheck = vecTy.getRank() > 1; + auto descType = xegpu::TensorDescType::get( vecTy.getShape(), vecTy.getElementType(), /*array_length=*/1, - /*boundary_check=*/true, xegpu::MemorySpace::Global); + boundaryCheck, xegpu::MemorySpace::Global); xegpu::CreateNdDescOp ndDesc = createNdDescriptor( rewriter, loc, descType, loadOp.getBase(), loadOp.getIndices()); @@ -285,10 +292,12 @@ struct StoreLowering : public OpRewritePattern { if (failed(storeLoadPreconditions(rewriter, storeOp, vecTy))) return failure(); - auto descType = - xegpu::TensorDescType::get(vecTy.getShape(), vecTy.getElementType(), - /*array_length=*/1, /*boundary_check=*/true, - xegpu::MemorySpace::Global); + // Boundary check is available only for block instructions. + bool boundaryCheck = vecTy.getRank() > 1; + + auto descType = xegpu::TensorDescType::get( + vecTy.getShape(), vecTy.getElementType(), + /*array_length=*/1, boundaryCheck, xegpu::MemorySpace::Global); xegpu::CreateNdDescOp ndDesc = createNdDescriptor( rewriter, loc, descType, storeOp.getBase(), storeOp.getIndices()); diff --git a/mlir/test/Conversion/VectorToXeGPU/load-to-xegpu.mlir b/mlir/test/Conversion/VectorToXeGPU/load-to-xegpu.mlir index e2a506f8ad5a..7cef17df79dd 100644 --- a/mlir/test/Conversion/VectorToXeGPU/load-to-xegpu.mlir +++ b/mlir/test/Conversion/VectorToXeGPU/load-to-xegpu.mlir @@ -12,7 +12,7 @@ func.func @load_1D_vector(%source: memref<8x16x32xf32>, %offset: index) -> vecto // CHECK: %[[DESC:.+]] = xegpu.create_nd_tdesc // CHECK-SAME: %[[SRC]][%[[OFFSET]], %[[OFFSET]], %[[OFFSET]]] // CHECK-SAME: memref<8x16x32xf32> -> !xegpu.tensor_desc<8xf32, -// CHECK-SAME: boundary_check = true +// CHECK-SAME: boundary_check = false // CHECK: %[[VEC:.+]] = xegpu.load_nd %[[DESC]]{{.*}}-> vector<8xf32> // CHECK: return %[[VEC]] diff --git a/mlir/test/Conversion/VectorToXeGPU/store-to-xegpu.mlir b/mlir/test/Conversion/VectorToXeGPU/store-to-xegpu.mlir index 3d45407c2486..4f069ebc39db 100644 --- a/mlir/test/Conversion/VectorToXeGPU/store-to-xegpu.mlir +++ b/mlir/test/Conversion/VectorToXeGPU/store-to-xegpu.mlir @@ -14,7 +14,7 @@ func.func @store_1D_vector(%vec: vector<8xf32>, // CHECK: %[[DESC:.+]] = xegpu.create_nd_tdesc // CHECK-SAME: %[[SRC]][%[[OFFSET]], %[[OFFSET]], %[[OFFSET]]] // CHECK-SAME: memref<8x16x32xf32> -> !xegpu.tensor_desc<8xf32, -// CHECK-SAME: boundary_check = true +// CHECK-SAME: boundary_check = false // CHECK: xegpu.store_nd %[[VEC]], %[[DESC]] : vector<8xf32> // ----- diff --git a/mlir/test/Conversion/VectorToXeGPU/transfer-read-to-xegpu.mlir b/mlir/test/Conversion/VectorToXeGPU/transfer-read-to-xegpu.mlir index 4841ecbb62e8..497eb86cea83 100644 --- a/mlir/test/Conversion/VectorToXeGPU/transfer-read-to-xegpu.mlir +++ b/mlir/test/Conversion/VectorToXeGPU/transfer-read-to-xegpu.mlir @@ -119,6 +119,19 @@ func.func @no_load_out_of_bounds_non_zero_pad(%source: memref<32x64xf32>, // ----- +func.func @no_load_out_of_bounds_1D_vector(%source: memref<8x16x32xf32>, + %offset: index) -> vector<8xf32> { + %c0 = arith.constant 0.0 : f32 + %0 = vector.transfer_read %source[%offset, %offset, %offset], %c0 + {in_bounds = [false]} : memref<8x16x32xf32>, vector<8xf32> + return %0 : vector<8xf32> +} + +// CHECK-LABEL: @no_load_out_of_bounds_1D_vector( +// CHECK: vector.transfer_read + +// ----- + func.func @no_load_masked(%source : memref<4xf32>, %offset : index) -> vector<4xf32> { %c0 = arith.constant 0.0 : f32 diff --git a/mlir/test/Conversion/VectorToXeGPU/transfer-write-to-xegpu.mlir b/mlir/test/Conversion/VectorToXeGPU/transfer-write-to-xegpu.mlir index 076760fe21dc..91e3fb3841f6 100644 --- a/mlir/test/Conversion/VectorToXeGPU/transfer-write-to-xegpu.mlir +++ b/mlir/test/Conversion/VectorToXeGPU/transfer-write-to-xegpu.mlir @@ -164,3 +164,16 @@ func.func @no_store_unsupported_map(%vec: vector<8x16xf32>, // CHECK-LABEL: @no_store_unsupported_map( // CHECK: vector.transfer_write + +// ----- + +func.func @no_store_out_of_bounds_1D_vector(%vec: vector<8xf32>, + %source: memref<8x16x32xf32>, %offset: index) { + vector.transfer_write %vec, %source[%offset, %offset, %offset] + {in_bounds = [false]} + : vector<8xf32>, memref<8x16x32xf32> + return +} + +// CHECK-LABEL: @no_store_out_of_bounds_1D_vector( +// CHECK: vector.transfer_write -- cgit v1.2.3 From ccc8e454044477de9ce71c1b22dd048f189a9601 Mon Sep 17 00:00:00 2001 From: Haohai Wen Date: Fri, 13 Dec 2024 17:05:03 +0800 Subject: [PseudoProbe] Fix cleanup for pseudo probe after annotation (#119660) When using -sample-profile-remove-probe, pseudo probe desc should also be removed and dwarf discriminator for call instruction should be restored. --- llvm/lib/Transforms/IPO/SampleProfile.cpp | 24 ++++++++++++++++++---- .../SampleProfile/pseudo-probe-profile.ll | 2 ++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp index b2fa66f2a6d3..603beb3b883d 100644 --- a/llvm/lib/Transforms/IPO/SampleProfile.cpp +++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp @@ -529,7 +529,7 @@ protected: void generateMDProfMetadata(Function &F); bool rejectHighStalenessProfile(Module &M, ProfileSummaryInfo *PSI, const SampleProfileMap &Profiles); - void removePseudoProbeInsts(Module &M); + void removePseudoProbeInstsDiscriminator(Module &M); /// Map from function name to Function *. Used to find the function from /// the function name. If the function name contains suffix, additional @@ -2138,13 +2138,25 @@ bool SampleProfileLoader::rejectHighStalenessProfile( return false; } -void SampleProfileLoader::removePseudoProbeInsts(Module &M) { +void SampleProfileLoader::removePseudoProbeInstsDiscriminator(Module &M) { for (auto &F : M) { std::vector InstsToDel; for (auto &BB : F) { for (auto &I : BB) { if (isa(&I)) InstsToDel.push_back(&I); + else if (isa(&I)) + if (const DILocation *DIL = I.getDebugLoc().get()) { + // Restore dwarf discriminator for call. + unsigned Discriminator = DIL->getDiscriminator(); + if (DILocation::isPseudoProbeDiscriminator(Discriminator)) { + std::optional DwarfDiscriminator = + PseudoProbeDwarfDiscriminator::extractDwarfBaseDiscriminator( + Discriminator); + I.setDebugLoc(DIL->cloneWithDiscriminator( + DwarfDiscriminator ? *DwarfDiscriminator : 0)); + } + } } } for (auto *I : InstsToDel) @@ -2224,8 +2236,12 @@ bool SampleProfileLoader::runOnModule(Module &M, ModuleAnalysisManager *AM, notInlinedCallInfo) updateProfileCallee(pair.first, pair.second.entryCount); - if (RemoveProbeAfterProfileAnnotation && FunctionSamples::ProfileIsProbeBased) - removePseudoProbeInsts(M); + if (RemoveProbeAfterProfileAnnotation && + FunctionSamples::ProfileIsProbeBased) { + removePseudoProbeInstsDiscriminator(M); + if (auto *FuncInfo = M.getNamedMetadata(PseudoProbeDescMetadataName)) + M.eraseNamedMetadata(FuncInfo); + } return retval; } diff --git a/llvm/test/Transforms/SampleProfile/pseudo-probe-profile.ll b/llvm/test/Transforms/SampleProfile/pseudo-probe-profile.ll index b52f93763d49..66dbc49a1d21 100644 --- a/llvm/test/Transforms/SampleProfile/pseudo-probe-profile.ll +++ b/llvm/test/Transforms/SampleProfile/pseudo-probe-profile.ll @@ -4,6 +4,8 @@ ; RUN: opt < %t -passes=sample-profile -sample-profile-file=%S/Inputs/pseudo-probe-profile.prof -sample-profile-remove-probe -S | FileCheck %s -check-prefix=REMOVE-PROBE ; REMOVE-PROBE-NOT: call void @llvm.pseudoprobe +; REMOVE-PROBE-NOT: !llvm.pseudo_probe_desc +; REMOVE-PROBE: !DILexicalBlockFile({{.*}}, discriminator: 0) define dso_local i32 @foo(i32 %x, ptr %f) #0 !dbg !4 { entry: -- cgit v1.2.3 From 1fd3d1d04e6339fff7ef5b8b172ed4954885dde1 Mon Sep 17 00:00:00 2001 From: Jonathan Thackray Date: Fri, 13 Dec 2024 09:09:36 +0000 Subject: [AArch64] Add intrinsics for SME FP8 FDOT LANE instructions (#118492) Add support for the following SME 8 bit floating-point dot-product intrinsics: * void svdot_lane_za16_mf8_vg1x2_fpm(uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm); * void svdot_lane_za16_mf8_vg1x4_fpm(uint32_t slice, svmfloat8x4_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm); * void svdot_lane_za32_mf8_vg1x2_fpm(uint32_t slice, svmfloat8x2_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm); * void svdot_lane_za32_mf8_vg1x4_fpm(uint32_t slice, svmfloat8x4_t zn, svmfloat8_t zm, uint64_t imm_idx, fpm_t fpm); --------- Co-authored-by: Momchil Velikov Co-authored-by: Marian Lukac Co-authored-by: Caroline Concatto Co-authored-by: SpencerAbson --- clang/include/clang/Basic/arm_sme.td | 15 ++++ clang/include/clang/Basic/arm_sve_sme_incl.td | 1 + .../AArch64/sme2-intrinsics/acle_sme2_fp8_fdot.c | 96 ++++++++++++++++++++++ .../aarch64-sme2-intrinsics/acle_sme2_fp8_fdot.c | 38 +++++++++ llvm/include/llvm/IR/IntrinsicsAArch64.td | 25 ++++++ llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td | 8 +- llvm/lib/Target/AArch64/SMEInstrFormats.td | 89 ++++++++++++++++++++ .../CodeGen/AArch64/sme2-intrinsics-fp8-fdot.ll | 59 +++++++++++++ 8 files changed, 327 insertions(+), 4 deletions(-) create mode 100644 clang/test/CodeGen/AArch64/sme2-intrinsics/acle_sme2_fp8_fdot.c create mode 100644 clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_fp8_fdot.c create mode 100644 llvm/test/CodeGen/AArch64/sme2-intrinsics-fp8-fdot.ll diff --git a/clang/include/clang/Basic/arm_sme.td b/clang/include/clang/Basic/arm_sme.td index 71b2c7cdd04f..0fae70866cd5 100644 --- a/clang/include/clang/Basic/arm_sme.td +++ b/clang/include/clang/Basic/arm_sme.td @@ -740,6 +740,21 @@ let SMETargetGuard = "sme2" in { def SVLUTI4_LANE_ZT_X2 : Inst<"svluti4_lane_zt_{d}_x2", "2.di[i", "cUcsUsiUibhf", MergeNone, "aarch64_sme_luti4_lane_zt_x2", [IsStreaming, IsInZT0], [ImmCheck<0, ImmCheck0_0>, ImmCheck<2, ImmCheck0_3>]>; } +// +// SME2 FP8 instructions +// + +// FDOT +let SMETargetGuard = "sme-f8f32" in { + def SVDOT_LANE_FP8_ZA32_VG1x2 : Inst<"svdot_lane_za32[_mf8]_vg1x2_fpm", "vm2di>", "m", MergeNone, "aarch64_sme_fp8_fdot_lane_za32_vg1x2", [IsStreaming, IsInOutZA, SetsFPMR, IsOverloadNone], [ImmCheck<3, ImmCheck0_3>]>; + def SVDOT_LANE_FP8_ZA32_VG1x4 : Inst<"svdot_lane_za32[_mf8]_vg1x4_fpm", "vm4di>", "m", MergeNone, "aarch64_sme_fp8_fdot_lane_za32_vg1x4", [IsStreaming, IsInOutZA, SetsFPMR, IsOverloadNone], [ImmCheck<3, ImmCheck0_3>]>; +} + +let SMETargetGuard = "sme-f8f16" in { + def SVDOT_LANE_FP8_ZA16_VG1x2 : Inst<"svdot_lane_za16[_mf8]_vg1x2_fpm", "vm2di>", "m", MergeNone, "aarch64_sme_fp8_fdot_lane_za16_vg1x2", [IsStreaming, IsInOutZA, SetsFPMR, IsOverloadNone], [ImmCheck<3, ImmCheck0_7>]>; + def SVDOT_LANE_FP8_ZA16_VG1x4 : Inst<"svdot_lane_za16[_mf8]_vg1x4_fpm", "vm4di>", "m", MergeNone, "aarch64_sme_fp8_fdot_lane_za16_vg1x4", [IsStreaming, IsInOutZA, SetsFPMR, IsOverloadNone], [ImmCheck<3, ImmCheck0_7>]>; +} + //////////////////////////////////////////////////////////////////////////////// // SME2p1 - FMOPA, FMOPS (non-widening) let SMETargetGuard = "sme-b16b16" in { diff --git a/clang/include/clang/Basic/arm_sve_sme_incl.td b/clang/include/clang/Basic/arm_sve_sme_incl.td index de10be7bdce0..e7cc40db7dca 100644 --- a/clang/include/clang/Basic/arm_sve_sme_incl.td +++ b/clang/include/clang/Basic/arm_sve_sme_incl.td @@ -52,6 +52,7 @@ include "arm_immcheck_incl.td" // h: half-float // d: double // b: bfloat +// m: mfloat8 // Typespec modifiers // ------------------ diff --git a/clang/test/CodeGen/AArch64/sme2-intrinsics/acle_sme2_fp8_fdot.c b/clang/test/CodeGen/AArch64/sme2-intrinsics/acle_sme2_fp8_fdot.c new file mode 100644 index 000000000000..74d18c32d5b3 --- /dev/null +++ b/clang/test/CodeGen/AArch64/sme2-intrinsics/acle_sme2_fp8_fdot.c @@ -0,0 +1,96 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// REQUIRES: aarch64-registered-target +#include + +// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f8f16 -target-feature +sme-f8f32 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes mem2reg,instcombine,tailcallelim | FileCheck %s +// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f8f16 -target-feature +sme-f8f32 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f8f16 -target-feature +sme-f8f32 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes mem2reg,instcombine,tailcallelim | FileCheck %s +// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f8f16 -target-feature +sme-f8f32 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f8f16 -target-feature +sme-f8f32 -target-feature -S -disable-O0-optnone -Werror -Wall -o /dev/null %s +#include + +#ifdef SVE_OVERLOADED_FORMS +#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3) A1##A3 +#else +#define SVE_ACLE_FUNC(A1,A2,A3) A1##A2##A3 +#endif + +// CHECK-LABEL: define dso_local void @test_svdot_lane_za32_f8_vg1x2( +// CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za32.vg1x2(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZM]], i32 3) +// CHECK-NEXT: ret void +// +// CPP-CHECK-LABEL: define dso_local void @_Z29test_svdot_lane_za32_f8_vg1x2j13svmfloat8x2_tu13__SVMfloat8_tm( +// CPP-CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0:[0-9]+]] { +// CPP-CHECK-NEXT: [[ENTRY:.*:]] +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za32.vg1x2(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZM]], i32 3) +// CPP-CHECK-NEXT: ret void +// +void test_svdot_lane_za32_f8_vg1x2(uint32_t slice, svmfloat8x2_t zn, + svmfloat8_t zm, fpm_t fpmr) + __arm_streaming __arm_inout("za") { + SVE_ACLE_FUNC(svdot_lane_za32,_mf8,_vg1x2_fpm)(slice, zn, zm, 3, fpmr); +} + +// CHECK-LABEL: define dso_local void @test_svdot_lane_za32_f8_vg1x4( +// CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZN_COERCE2:%.*]], [[ZN_COERCE3:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za32.vg1x4(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZN_COERCE2]], [[ZN_COERCE3]], [[ZM]], i32 3) +// CHECK-NEXT: ret void +// +// CPP-CHECK-LABEL: define dso_local void @_Z29test_svdot_lane_za32_f8_vg1x4j13svmfloat8x4_tu13__SVMfloat8_tm( +// CPP-CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZN_COERCE2:%.*]], [[ZN_COERCE3:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0]] { +// CPP-CHECK-NEXT: [[ENTRY:.*:]] +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za32.vg1x4(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZN_COERCE2]], [[ZN_COERCE3]], [[ZM]], i32 3) +// CPP-CHECK-NEXT: ret void +// +void test_svdot_lane_za32_f8_vg1x4(uint32_t slice, svmfloat8x4_t zn, + svmfloat8_t zm, fpm_t fpmr) + __arm_streaming __arm_inout("za") { + SVE_ACLE_FUNC(svdot_lane_za32,_mf8,_vg1x4_fpm)(slice, zn, zm, 3, fpmr); +} + +// CHECK-LABEL: define dso_local void @test_svdot_lane_za16_f8_vg1x2( +// CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za16.vg1x2(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZM]], i32 3) +// CHECK-NEXT: ret void +// +// CPP-CHECK-LABEL: define dso_local void @_Z29test_svdot_lane_za16_f8_vg1x2j13svmfloat8x2_tu13__SVMfloat8_tm( +// CPP-CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0]] { +// CPP-CHECK-NEXT: [[ENTRY:.*:]] +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za16.vg1x2(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZM]], i32 3) +// CPP-CHECK-NEXT: ret void +// +void test_svdot_lane_za16_f8_vg1x2(uint32_t slice, svmfloat8x2_t zn, + svmfloat8_t zm, fpm_t fpmr) + __arm_streaming __arm_inout("za") { + SVE_ACLE_FUNC(svdot_lane_za16,_mf8,_vg1x2_fpm)(slice, zn, zm, 3, fpmr); +} + +// CHECK-LABEL: define dso_local void @test_svdot_lane_za16_f8_vg1x4( +// CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZN_COERCE2:%.*]], [[ZN_COERCE3:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za16.vg1x4(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZN_COERCE2]], [[ZN_COERCE3]], [[ZM]], i32 3) +// CHECK-NEXT: ret void +// +// CPP-CHECK-LABEL: define dso_local void @_Z29test_svdot_lane_za16_f8_vg1x4j13svmfloat8x4_tu13__SVMfloat8_tm( +// CPP-CHECK-SAME: i32 noundef [[SLICE:%.*]], [[ZN_COERCE0:%.*]], [[ZN_COERCE1:%.*]], [[ZN_COERCE2:%.*]], [[ZN_COERCE3:%.*]], [[ZM:%.*]], i64 noundef [[FPMR:%.*]]) #[[ATTR0]] { +// CPP-CHECK-NEXT: [[ENTRY:.*:]] +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPMR]]) +// CPP-CHECK-NEXT: tail call void @llvm.aarch64.sme.fp8.fdot.lane.za16.vg1x4(i32 [[SLICE]], [[ZN_COERCE0]], [[ZN_COERCE1]], [[ZN_COERCE2]], [[ZN_COERCE3]], [[ZM]], i32 3) +// CPP-CHECK-NEXT: ret void +// +void test_svdot_lane_za16_f8_vg1x4(uint32_t slice, svmfloat8x4_t zn, + svmfloat8_t zm, fpm_t fpmr) + __arm_streaming __arm_inout("za") { + SVE_ACLE_FUNC(svdot_lane_za16,_mf8,_vg1x4_fpm)(slice, zn, zm, 3, fpmr); +} diff --git a/clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_fp8_fdot.c b/clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_fp8_fdot.c new file mode 100644 index 000000000000..975f0b2e3dd8 --- /dev/null +++ b/clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_fp8_fdot.c @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme -target-feature +sme2 -verify -emit-llvm -o - %s + +// REQUIRES: aarch64-registered-target + +#include + +void test_features(uint32_t slice, svmfloat8_t f8, svmfloat8x2_t f8x2, + svmfloat8x4_t f8x4, uint64_t fpmr) __arm_streaming __arm_inout("za") { + // expected-error@+1 {{'svdot_lane_za32_mf8_vg1x2_fpm' needs target feature sme,sme-f8f32}} + svdot_lane_za32_mf8_vg1x2_fpm(slice, f8x2, f8, 3, fpmr); + // expected-error@+1 {{'svdot_lane_za32_mf8_vg1x4_fpm' needs target feature sme,sme-f8f32}} + svdot_lane_za32_mf8_vg1x4_fpm(slice, f8x4, f8, 3, fpmr); + // expected-error@+1 {{'svdot_lane_za16_mf8_vg1x2_fpm' needs target feature sme,sme-f8f16}} + svdot_lane_za16_mf8_vg1x2_fpm(slice, f8x2, f8, 3, fpmr); + // expected-error@+1 {{'svdot_lane_za16_mf8_vg1x4_fpm' needs target feature sme,sme-f8f16}} + svdot_lane_za16_mf8_vg1x4_fpm(slice, f8x4, f8, 3, fpmr); +} + +void test_imm(uint32_t slice, svmfloat8_t f8, svmfloat8x2_t f8x2, + svmfloat8x4_t f8x4, uint64_t fpmr) __arm_streaming __arm_inout("za") { +// expected-error@+1{{argument value 18446744073709551615 is outside the valid range [0, 3]}} + svdot_lane_za32_mf8_vg1x2_fpm(slice, f8x2, f8, -1, fpmr); +// expected-error@+1{{argument value 18446744073709551615 is outside the valid range [0, 3]}} + svdot_lane_za32_mf8_vg1x4_fpm(slice, f8x4, f8, -1, fpmr); +// expected-error@+1{{argument value 18446744073709551615 is outside the valid range [0, 7]}} + svdot_lane_za16_mf8_vg1x2_fpm(slice, f8x2, f8, -1, fpmr); +// expected-error@+1{{argument value 18446744073709551615 is outside the valid range [0, 7]}} + svdot_lane_za16_mf8_vg1x4_fpm(slice, f8x4, f8, -1, fpmr); + +// expected-error@+1{{argument value 4 is outside the valid range [0, 3]}} + svdot_lane_za32_mf8_vg1x2_fpm(slice, f8x2, f8, 4, fpmr); +// expected-error@+1{{argument value 4 is outside the valid range [0, 3]}} + svdot_lane_za32_mf8_vg1x4_fpm(slice, f8x4, f8, 4, fpmr); +// expected-error@+1{{argument value 8 is outside the valid range [0, 7]}} + svdot_lane_za16_mf8_vg1x2_fpm(slice, f8x2, f8, 8, fpmr); +// expected-error@+1{{argument value 8 is outside the valid range [0, 7]}} + svdot_lane_za16_mf8_vg1x4_fpm(slice, f8x4, f8, 8, fpmr); +} diff --git a/llvm/include/llvm/IR/IntrinsicsAArch64.td b/llvm/include/llvm/IR/IntrinsicsAArch64.td index 0a1bd4c923b9..654bc64a30bd 100644 --- a/llvm/include/llvm/IR/IntrinsicsAArch64.td +++ b/llvm/include/llvm/IR/IntrinsicsAArch64.td @@ -3856,6 +3856,31 @@ def int_aarch64_sve_famin_u : AdvSIMD_Pred2VectorArg_Intrinsic; def int_aarch64_neon_famax : AdvSIMD_2VectorArg_Intrinsic; def int_aarch64_neon_famin : AdvSIMD_2VectorArg_Intrinsic; + +// SME FP8 FDOT intrinsics +let TargetPrefix = "aarch64" in { + +class SME2_FP8_FDOT_LANE_VG1x2 : + DefaultAttrsIntrinsic<[], [llvm_i32_ty, + llvm_nxv16i8_ty, llvm_nxv16i8_ty, + llvm_nxv16i8_ty, + llvm_i32_ty], + [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg>]>; + +class SME2_FP8_FDOT_LANE_VG1x4 : + DefaultAttrsIntrinsic<[], [llvm_i32_ty, + llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_nxv16i8_ty, + llvm_nxv16i8_ty, + llvm_i32_ty], + [IntrInaccessibleMemOnly, IntrHasSideEffects, ImmArg>]>; + + def int_aarch64_sme_fp8_fdot_lane_za16_vg1x2 : SME2_FP8_FDOT_LANE_VG1x2; + def int_aarch64_sme_fp8_fdot_lane_za16_vg1x4 : SME2_FP8_FDOT_LANE_VG1x4; + + def int_aarch64_sme_fp8_fdot_lane_za32_vg1x2 : SME2_FP8_FDOT_LANE_VG1x2; + def int_aarch64_sme_fp8_fdot_lane_za32_vg1x4 : SME2_FP8_FDOT_LANE_VG1x4; +} + // // FP8 Intrinsics // diff --git a/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td index bd36e21d1be4..fa577cf92e99 100644 --- a/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td @@ -986,8 +986,8 @@ def LUTI4_S_4ZZT2Z : sme2_luti4_vector_vg4_strided<0b00, 0b00, "luti4">; let Predicates = [HasSMEF8F16] in { defm FVDOT_VG2_M2ZZI_BtoH : sme2p1_multi_vec_array_vg2_index_f8f16<"fvdot", 0b11, 0b110, ZZ_b_mul_r, ZPR4b8>; -defm FDOT_VG2_M2ZZI_BtoH : sme2p1_multi_vec_array_vg2_index_f8f16<"fdot", 0b11, 0b010, ZZ_b_mul_r, ZPR4b8>; -defm FDOT_VG4_M4ZZI_BtoH : sme2p1_multi_vec_array_vg4_index_f8f16<"fdot", 0b100, ZZZZ_b_mul_r, ZPR4b8>; +defm FDOT_VG2_M2ZZI_BtoH : sme2_fp8_fdot_index_za16_vg1x2<"fdot", int_aarch64_sme_fp8_fdot_lane_za16_vg1x2>; +defm FDOT_VG4_M4ZZI_BtoH : sme2_fp8_fdot_index_za16_vg1x4<"fdot", int_aarch64_sme_fp8_fdot_lane_za16_vg1x4>; defm FDOT_VG2_M2ZZ_BtoH : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0010001, MatrixOp16, ZZ_b, ZPR4b8>; defm FDOT_VG4_M4ZZ_BtoH : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0110001, MatrixOp16, ZZZZ_b, ZPR4b8>; @@ -1008,9 +1008,9 @@ defm FMOPA_MPPZZ_BtoH : sme2_fp8_fmopa_za16<"fmopa", int_aarch64_sme_fp8_fmopa_z } //[HasSMEF8F16] let Predicates = [HasSMEF8F32] in { +defm FDOT_VG2_M2ZZI_BtoS : sme2_fp8_fdot_index_za32_vg1x2<"fdot", int_aarch64_sme_fp8_fdot_lane_za32_vg1x2>; +defm FDOT_VG4_M4ZZI_BtoS : sme2_fp8_fdot_index_za32_vg1x4<"fdot", int_aarch64_sme_fp8_fdot_lane_za32_vg1x4>; -defm FDOT_VG2_M2ZZI_BtoS : sme2_multi_vec_array_vg2_index_32b<"fdot", 0b01, 0b0111, ZZ_b_mul_r, ZPR4b8, nxv16i8, null_frag>; -defm FDOT_VG4_M4ZZI_BtoS : sme2_multi_vec_array_vg4_index_32b<"fdot", 0b0001, ZZZZ_b_mul_r, ZPR4b8, nxv16i8, null_frag>; defm FDOT_VG2_M2ZZ_BtoS : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0010011, MatrixOp32, ZZ_b, ZPR4b8>; defm FDOT_VG4_M4ZZ_BtoS : sme2_dot_mla_add_sub_array_vg24_single<"fdot", 0b0110011, MatrixOp32, ZZZZ_b, ZPR4b8>; diff --git a/llvm/lib/Target/AArch64/SMEInstrFormats.td b/llvm/lib/Target/AArch64/SMEInstrFormats.td index b62ffcbebc65..9f25749c83db 100644 --- a/llvm/lib/Target/AArch64/SMEInstrFormats.td +++ b/llvm/lib/Target/AArch64/SMEInstrFormats.td @@ -244,6 +244,7 @@ class SME2_Tile_Movaz_Pat(name # _PSEUDO) $tile, $base, $offset)>; + //===----------------------------------------------------------------------===// // SME pattern match helpers. //===----------------------------------------------------------------------===// @@ -5793,3 +5794,91 @@ multiclass sme2_fmop4a_fp8_fp16_2way { // Multiple vectors def _M2Z2Z_BtoH : sme2_fp8_fp16_quarter_tile_outer_product<0b1, 0b1, mnemonic, ZZ_b_mul_r_Lo, ZZ_b_mul_r_Hi>; } + +// FP8 SME FDOT instructions + +multiclass sme2_fp8_fdot_index_za16_vg1x2 { + def NAME : sme2_multi_vec_array_vg2_index<0b11, {0b0,?,?,0b10,?}, MatrixOp16, + ZZ_b_mul_r, ZPR4b8, + VectorIndexH32b_timm, mnemonic>, + SMEPseudo2Instr{ + let Uses=[FPMR, FPCR]; + + bits<3> i; + let Inst{11-10} = i{2-1}; + let Inst{3} = i{0}; + } + + def : InstAlias(NAME) MatrixOp16:$ZAda, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, + ZZ_b_mul_r:$Zn, ZPR4b8:$Zm, VectorIndexH32b_timm:$i), 0>; + + + def _PSEUDO : sme2_za_array_2op_multi_index_pseudo; + + def : SME2_ZA_TwoOp_VG2_Multi_Index_Pat; +} + +multiclass sme2_fp8_fdot_index_za16_vg1x4 { + def NAME : sme2_multi_vec_array_vg4_index<0b0, {0b1,?,?,0b100,?}, MatrixOp16, + ZZZZ_b_mul_r, ZPR4b8, + VectorIndexH32b_timm, mnemonic>, + SMEPseudo2Instr { + let Uses=[FPMR, FPCR]; + + bits<3> i; + let Inst{11-10} = i{2-1}; + let Inst{3} = i{0}; + } + + def : InstAlias(NAME) MatrixOp16:$ZAda, MatrixIndexGPR32Op8_11:$Rv, + sme_elm_idx0_7:$imm3, ZZZZ_b_mul_r:$Zn, ZPR4b8:$Zm, VectorIndexH32b_timm:$i), 0>; + + + def _PSEUDO : sme2_za_array_2op_multi_index_pseudo; + + def : SME2_ZA_TwoOp_VG4_Multi_Index_Pat; +} + +multiclass sme2_fp8_fdot_index_za32_vg1x2 { + def NAME : sme2_multi_vec_array_vg2_index<0b01, {0b0,?,?,0b111}, MatrixOp32, ZZ_b_mul_r, ZPR4b8, + VectorIndexS32b_timm, mnemonic>, + SMEPseudo2Instr { + let Uses=[FPMR, FPCR]; + + bits<2> i; + let Inst{11-10} = i; + } + + def : InstAlias(NAME) MatrixOp32:$ZAda, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, + ZZ_b_mul_r:$Zn, ZPR4b8:$Zm, VectorIndexS32b_timm:$i), 0>; + + def _PSEUDO : sme2_za_array_2op_multi_index_pseudo; + + def : SME2_ZA_TwoOp_VG2_Multi_Index_Pat; +} + +multiclass sme2_fp8_fdot_index_za32_vg1x4 { + def NAME : sme2_multi_vec_array_vg4_index<0b1, {0b0,?,?,0b0,0b001}, MatrixOp32, ZZZZ_b_mul_r, + ZPR4b8, VectorIndexS32b_timm, mnemonic>, + SMEPseudo2Instr { + let Uses=[FPMR, FPCR]; + + bits<2> i; + let Inst{11-10} = i; + } + + def : InstAlias(NAME) MatrixOp32:$ZAda, MatrixIndexGPR32Op8_11:$Rv, sme_elm_idx0_7:$imm3, + ZZZZ_b_mul_r:$Zn, ZPR4b8:$Zm, VectorIndexS32b_timm:$i), 0>; + + def _PSEUDO : sme2_za_array_2op_multi_index_pseudo; + + def : SME2_ZA_TwoOp_VG4_Multi_Index_Pat; +} diff --git a/llvm/test/CodeGen/AArch64/sme2-intrinsics-fp8-fdot.ll b/llvm/test/CodeGen/AArch64/sme2-intrinsics-fp8-fdot.ll new file mode 100644 index 000000000000..7fcbc328aa08 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/sme2-intrinsics-fp8-fdot.ll @@ -0,0 +1,59 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "^[ \t]*//.*$" --version 4 +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2,+sme-f8f16,+sme-f8f32 -verify-machineinstrs -force-streaming < %s | FileCheck %s + +target triple = "aarch64-linux" + +define void @test_fdot16_1x2_indexed(i32 %slice.0, %zn1, %zn2, %zm) #0 { +; CHECK-LABEL: test_fdot16_1x2_indexed: +; CHECK: mov w8, w0 +; CHECK: fdot za.h[w8, 7, vgx2], { z0.b, z1.b }, z2.b[1] +; CHECK: ret + %slice = add i32 %slice.0, 7 + call void @llvm.aarch64.sme.fp8.fdot.lane.za16.vg1x2(i32 %slice, + %zn1, %zn2, + %zm, i32 1) + ret void +} + +define void @test_fdot16_1x4_indexed(i32 %slice.0, %zn1, %zn2, %zn3, %zn4, +; CHECK-LABEL: test_fdot16_1x4_indexed: +; CHECK: mov w8, w0 +; CHECK: fdot za.h[w8, 7, vgx4], { z0.b - z3.b }, z4.b[1] +; CHECK: ret + %zm) #0 { + %slice = add i32 %slice.0, 7 + call void @llvm.aarch64.sme.fp8.fdot.lane.za16.vg1x4(i32 %slice, + %zn1, %zn2, %zn3, %zn4, + %zm, i32 1) + ret void +} + +define void @test_fdot32_1x2_indexed(i32 %slice.0, +; CHECK-LABEL: test_fdot32_1x2_indexed: +; CHECK: mov w8, w0 +; CHECK: fdot za.s[w8, 7, vgx2], { z0.b, z1.b }, z2.b[1] +; CHECK: ret + %zn1, %zn2, + %zm) #0 { + %slice = add i32 %slice.0, 7 + call void @llvm.aarch64.sme.fp8.fdot.lane.za32.vg1x2(i32 %slice, + %zn1, %zn2, + %zm, i32 1) + ret void +} + +define void @test_fdot32_1x4_indexed(i32 %slice.0, +; CHECK-LABEL: test_fdot32_1x4_indexed: +; CHECK: mov w8, w0 +; CHECK: fdot za.s[w8, 7, vgx4], { z0.b - z3.b }, z4.b[1] +; CHECK: ret + %zn1, %zn2, %zn3, %zn4, + %zm) #0 { + %slice = add i32 %slice.0, 7 + call void @llvm.aarch64.sme.fp8.fdot.lane.za32.vg1x4(i32 %slice, + %zn1, %zn2, %zn3, %zn4, + %zm, i32 1) + ret void +} + +attributes #0 = { "target-features" = "+sme,+sme-f8f32,+sme-f8f16" } -- cgit v1.2.3 From 7da4b6b7a5beba9ff2589c8ecdc141316acdad12 Mon Sep 17 00:00:00 2001 From: Congcong Cai Date: Fri, 13 Dec 2024 17:10:30 +0800 Subject: [clang-tidy][doc][NFC] format doc for misc-unused-parameters (#119839) --- .../docs/clang-tidy/checks/misc/unused-parameters.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/clang-tools-extra/docs/clang-tidy/checks/misc/unused-parameters.rst b/clang-tools-extra/docs/clang-tidy/checks/misc/unused-parameters.rst index 87b75579d97a..9321f651fd70 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/misc/unused-parameters.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/misc/unused-parameters.rst @@ -35,13 +35,13 @@ Options .. option:: StrictMode - When `false` (default value), the check will ignore trivially unused parameters, - i.e. when the corresponding function has an empty body (and in case of - constructors - no constructor initializers). When the function body is empty, - an unused parameter is unlikely to be unnoticed by a human reader, and - there's basically no place for a bug to hide. + When `false` (default value), the check will ignore trivially unused parameters, + i.e. when the corresponding function has an empty body (and in case of + constructors - no constructor initializers). When the function body is empty, + an unused parameter is unlikely to be unnoticed by a human reader, and + there's basically no place for a bug to hide. .. option:: IgnoreVirtual - Determines whether virtual method parameters should be inspected. - Set to `true` to ignore them. Default is `false`. + Determines whether virtual method parameters should be inspected. + Set to `true` to ignore them. Default is `false`. -- cgit v1.2.3 From d6cc140dfdccc7314cc124a7d4aa4d0176299531 Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Fri, 13 Dec 2024 09:20:02 +0000 Subject: [CI] Refactor common functionality into separate script (#119530) This patch refactors some common functionality present in the CI scripts to a separate shell script. This is mainly intended to make it easier to reuse this functionality inside of a Github Actions pipeline as we make the switch. --- .ci/compute-projects.sh | 194 +++++++++++++++++++++++++++++++ .ci/generate-buildkite-pipeline-premerge | 179 +--------------------------- 2 files changed, 195 insertions(+), 178 deletions(-) create mode 100644 .ci/compute-projects.sh diff --git a/.ci/compute-projects.sh b/.ci/compute-projects.sh new file mode 100644 index 000000000000..32baf26b4f0a --- /dev/null +++ b/.ci/compute-projects.sh @@ -0,0 +1,194 @@ +#!/usr/bin/env bash +#===----------------------------------------------------------------------===## +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +#===----------------------------------------------------------------------===## + +# +# This file contains functions to compute which projects should be built by CI +# systems and is intended to provide common functionality applicable across +# multiple systems during a transition period. +# + +function compute-projects-to-test() { + isForWindows=$1 + shift + projects=${@} + for project in ${projects}; do + echo "${project}" + case ${project} in + lld) + for p in bolt cross-project-tests; do + echo $p + done + ;; + llvm) + for p in bolt clang clang-tools-extra lld lldb mlir polly; do + echo $p + done + # Flang is not stable in Windows CI at the moment + if [[ $isForWindows == 0 ]]; then + echo flang + fi + ;; + clang) + # lldb is temporarily removed to alleviate Linux pre-commit CI waiting times + for p in clang-tools-extra compiler-rt cross-project-tests; do + echo $p + done + ;; + clang-tools-extra) + echo libc + ;; + mlir) + # Flang is not stable in Windows CI at the moment + if [[ $isForWindows == 0 ]]; then + echo flang + fi + ;; + *) + # Nothing to do + ;; + esac + done +} + +function compute-runtimes-to-test() { + projects=${@} + for project in ${projects}; do + case ${project} in + clang) + for p in libcxx libcxxabi libunwind; do + echo $p + done + ;; + *) + # Nothing to do + ;; + esac + done +} + +function add-dependencies() { + projects=${@} + for project in ${projects}; do + echo "${project}" + case ${project} in + bolt) + for p in clang lld llvm; do + echo $p + done + ;; + cross-project-tests) + for p in lld clang; do + echo $p + done + ;; + clang-tools-extra) + for p in llvm clang; do + echo $p + done + ;; + compiler-rt|libc|openmp) + echo clang lld + ;; + flang|lldb|libclc) + for p in llvm clang; do + echo $p + done + ;; + lld|mlir|polly) + echo llvm + ;; + *) + # Nothing to do + ;; + esac + done +} + +function exclude-linux() { + projects=${@} + for project in ${projects}; do + case ${project} in + cross-project-tests) ;; # tests failing + openmp) ;; # https://github.com/google/llvm-premerge-checks/issues/410 + *) + echo "${project}" + ;; + esac + done +} + +function exclude-windows() { + projects=${@} + for project in ${projects}; do + case ${project} in + cross-project-tests) ;; # tests failing + compiler-rt) ;; # tests taking too long + openmp) ;; # TODO: having trouble with the Perl installation + libc) ;; # no Windows support + lldb) ;; # custom environment requirements (https://github.com/llvm/llvm-project/pull/94208#issuecomment-2146256857) + bolt) ;; # tests are not supported yet + *) + echo "${project}" + ;; + esac + done +} + +# Prints only projects that are both present in $modified_dirs and the passed +# list. +function keep-modified-projects() { + projects=${@} + for project in ${projects}; do + if echo "$modified_dirs" | grep -q -E "^${project}$"; then + echo "${project}" + fi + done +} + +function check-targets() { + # Do not use "check-all" here because if there is "check-all" plus a + # project specific target like "check-clang", that project's tests + # will be run twice. + projects=${@} + for project in ${projects}; do + case ${project} in + clang-tools-extra) + echo "check-clang-tools" + ;; + compiler-rt) + echo "check-compiler-rt" + ;; + cross-project-tests) + echo "check-cross-project" + ;; + libcxx) + echo "check-cxx" + ;; + libcxxabi) + echo "check-cxxabi" + ;; + libunwind) + echo "check-unwind" + ;; + lldb) + echo "check-lldb" + ;; + pstl) + # Currently we do not run pstl tests in CI. + ;; + libclc) + # Currently there is no testing for libclc. + ;; + *) + echo "check-${project}" + ;; + esac + done +} + diff --git a/.ci/generate-buildkite-pipeline-premerge b/.ci/generate-buildkite-pipeline-premerge index 190dd1e5ba5a..9d9ca3218394 100755 --- a/.ci/generate-buildkite-pipeline-premerge +++ b/.ci/generate-buildkite-pipeline-premerge @@ -52,184 +52,7 @@ modified_dirs=$(echo "$MODIFIED_FILES" | cut -d'/' -f1 | sort -u) echo "Directories modified:" >&2 echo "$modified_dirs" >&2 -function compute-projects-to-test() { - isForWindows=$1 - shift - projects=${@} - for project in ${projects}; do - echo "${project}" - case ${project} in - lld) - for p in bolt cross-project-tests; do - echo $p - done - ;; - llvm) - for p in bolt clang clang-tools-extra lld lldb mlir polly; do - echo $p - done - # Flang is not stable in Windows CI at the moment - if [[ $isForWindows == 0 ]]; then - echo flang - fi - ;; - clang) - # lldb is temporarily removed to alleviate Linux pre-commit CI waiting times - for p in clang-tools-extra compiler-rt cross-project-tests; do - echo $p - done - ;; - clang-tools-extra) - echo libc - ;; - mlir) - # Flang is not stable in Windows CI at the moment - if [[ $isForWindows == 0 ]]; then - echo flang - fi - ;; - *) - # Nothing to do - ;; - esac - done -} - -function compute-runtimes-to-test() { - projects=${@} - for project in ${projects}; do - case ${project} in - clang) - for p in libcxx libcxxabi libunwind; do - echo $p - done - ;; - *) - # Nothing to do - ;; - esac - done -} - -function add-dependencies() { - projects=${@} - for project in ${projects}; do - echo "${project}" - case ${project} in - bolt) - for p in clang lld llvm; do - echo $p - done - ;; - cross-project-tests) - for p in lld clang; do - echo $p - done - ;; - clang-tools-extra) - for p in llvm clang; do - echo $p - done - ;; - compiler-rt|libc|openmp) - echo clang lld - ;; - flang|lldb|libclc) - for p in llvm clang; do - echo $p - done - ;; - lld|mlir|polly) - echo llvm - ;; - *) - # Nothing to do - ;; - esac - done -} - -function exclude-linux() { - projects=${@} - for project in ${projects}; do - case ${project} in - cross-project-tests) ;; # tests failing - openmp) ;; # https://github.com/google/llvm-premerge-checks/issues/410 - *) - echo "${project}" - ;; - esac - done -} - -function exclude-windows() { - projects=${@} - for project in ${projects}; do - case ${project} in - cross-project-tests) ;; # tests failing - compiler-rt) ;; # tests taking too long - openmp) ;; # TODO: having trouble with the Perl installation - libc) ;; # no Windows support - lldb) ;; # custom environment requirements (https://github.com/llvm/llvm-project/pull/94208#issuecomment-2146256857) - bolt) ;; # tests are not supported yet - *) - echo "${project}" - ;; - esac - done -} - -# Prints only projects that are both present in $modified_dirs and the passed -# list. -function keep-modified-projects() { - projects=${@} - for project in ${projects}; do - if echo "$modified_dirs" | grep -q -E "^${project}$"; then - echo "${project}" - fi - done -} - -function check-targets() { - # Do not use "check-all" here because if there is "check-all" plus a - # project specific target like "check-clang", that project's tests - # will be run twice. - projects=${@} - for project in ${projects}; do - case ${project} in - clang-tools-extra) - echo "check-clang-tools" - ;; - compiler-rt) - echo "check-compiler-rt" - ;; - cross-project-tests) - echo "check-cross-project" - ;; - libcxx) - echo "check-cxx" - ;; - libcxxabi) - echo "check-cxxabi" - ;; - libunwind) - echo "check-unwind" - ;; - lldb) - echo "check-lldb" - ;; - pstl) - # Currently we do not run pstl tests in CI. - ;; - libclc) - # Currently there is no testing for libclc. - ;; - *) - echo "check-${project}" - ;; - esac - done -} +. ./.ci/compute-projects.sh # Project specific pipelines. -- cgit v1.2.3 From bc29fc937c6cb4a210f80c93c79fc6ed97c801f8 Mon Sep 17 00:00:00 2001 From: Petr Kurapov Date: Fri, 13 Dec 2024 10:26:57 +0100 Subject: [MLIR] Create GPU utils library & move distribution utils (#119264) Continue the move of `warp_execute_on_lane_0` op to the gpu dialect (#116994). This patch creates a utils library in GPU and moves generic helper functions there. --- .../mlir/Conversion/GPUCommon/GPUCommonPass.h | 2 +- mlir/include/mlir/Dialect/GPU/Transforms/Passes.h | 2 +- mlir/include/mlir/Dialect/GPU/Transforms/Utils.h | 53 ---- .../mlir/Dialect/GPU/Utils/DistributionUtils.h | 59 +++++ mlir/include/mlir/Dialect/GPU/Utils/GPUUtils.h | 53 ++++ mlir/lib/Dialect/GPU/CMakeLists.txt | 3 +- .../Dialect/GPU/Transforms/AsyncRegionRewriter.cpp | 2 +- .../lib/Dialect/GPU/Transforms/KernelOutlining.cpp | 2 +- .../GPU/Transforms/SubgroupReduceLowering.cpp | 2 +- mlir/lib/Dialect/GPU/Transforms/Utils.cpp | 44 ---- mlir/lib/Dialect/GPU/Utils/CMakeLists.txt | 14 + mlir/lib/Dialect/GPU/Utils/DistributionUtils.cpp | 144 ++++++++++ mlir/lib/Dialect/GPU/Utils/Utils.cpp | 44 ++++ mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt | 1 + .../Dialect/Vector/Transforms/VectorDistribute.cpp | 292 ++++++--------------- 15 files changed, 398 insertions(+), 319 deletions(-) delete mode 100644 mlir/include/mlir/Dialect/GPU/Transforms/Utils.h create mode 100644 mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h create mode 100644 mlir/include/mlir/Dialect/GPU/Utils/GPUUtils.h delete mode 100644 mlir/lib/Dialect/GPU/Transforms/Utils.cpp create mode 100644 mlir/lib/Dialect/GPU/Utils/CMakeLists.txt create mode 100644 mlir/lib/Dialect/GPU/Utils/DistributionUtils.cpp create mode 100644 mlir/lib/Dialect/GPU/Utils/Utils.cpp diff --git a/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h b/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h index 5f40315a8490..094360e75ab6 100644 --- a/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h +++ b/mlir/include/mlir/Conversion/GPUCommon/GPUCommonPass.h @@ -8,7 +8,7 @@ #ifndef MLIR_CONVERSION_GPUCOMMON_GPUCOMMONPASS_H_ #define MLIR_CONVERSION_GPUCOMMON_GPUCOMMONPASS_H_ -#include "mlir/Dialect/GPU/Transforms/Utils.h" +#include "mlir/Dialect/GPU/Utils/GPUUtils.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/IR/Builders.h" #include "mlir/IR/Types.h" diff --git a/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h b/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h index 8eb711962583..aaef91f31ab9 100644 --- a/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h +++ b/mlir/include/mlir/Dialect/GPU/Transforms/Passes.h @@ -13,8 +13,8 @@ #ifndef MLIR_DIALECT_GPU_TRANSFORMS_PASSES_H_ #define MLIR_DIALECT_GPU_TRANSFORMS_PASSES_H_ -#include "Utils.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" +#include "mlir/Dialect/GPU/Utils/GPUUtils.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Pass/Pass.h" #include diff --git a/mlir/include/mlir/Dialect/GPU/Transforms/Utils.h b/mlir/include/mlir/Dialect/GPU/Transforms/Utils.h deleted file mode 100644 index 073493971e6b..000000000000 --- a/mlir/include/mlir/Dialect/GPU/Transforms/Utils.h +++ /dev/null @@ -1,53 +0,0 @@ -//===- Passes.h - Pass Entrypoints ------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This header file defines utility functions exposed by the GPU dialect -// -//===----------------------------------------------------------------------===// - -#ifndef MLIR_DIALECT_GPU_TRANSFORMS_UTILS_H_ -#define MLIR_DIALECT_GPU_TRANSFORMS_UTILS_H_ - -#include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/Vector/IR/VectorOps.h" -#include "mlir/Support/LLVM.h" - -#include - -namespace mlir { -class Operation; -class Value; - -namespace gpu { -class GPUFuncOp; -class LaunchOp; - -/// Returns the matching vector combining kind. -vector::CombiningKind convertReductionKind(gpu::AllReduceOperation mode); -} // namespace gpu - -/// Get a gpu.func created from outlining the region of a gpu.launch op with the -/// given `kernelFnName`. The region of the `launchOp` can use values from -/// above. These need to be captured and passed as arguments to the generated -/// gpu.func. The generated function has arguments -/// - corresponding to the values passed in as `operands`, in that order. -/// - any additional values that might be used within the region of the -/// `launchOp` and defined above it. These captured values are appended to the -/// `operands` list. -gpu::GPUFuncOp outlineKernelFunc(gpu::LaunchOp launchOp, StringRef kernelFnName, - SmallVectorImpl &operands); - -/// Sink operations into the `launchOp` to reduce the number of values that are -/// used within the region of the operation, but defined outside of the -/// region. -LogicalResult sinkOperationsIntoLaunchOp( - gpu::LaunchOp launchOp, - llvm::function_ref isSinkingBeneficiary); - -} // namespace mlir -#endif // MLIR_DIALECT_GPU_TRANSFORMS_UTILS_H_ diff --git a/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h b/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h new file mode 100644 index 000000000000..ff8840a76977 --- /dev/null +++ b/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h @@ -0,0 +1,59 @@ +//===- DistributionUtils.h - Distribution Utilities -------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_ +#define MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBITIONUTILS_H_ + +#include "mlir/Dialect/Affine/IR/AffineOps.h" +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/Dialect/GPU/IR/GPUDialect.h" +#include "mlir/IR/PatternMatch.h" +#include "mlir/IR/Value.h" + +namespace mlir::gpu { +struct WarpDistributionPattern : OpRewritePattern { + using OpRewritePattern::OpRewritePattern; + using Base = WarpDistributionPattern; + + virtual LogicalResult + matchAndRewrite(WarpExecuteOnLane0Op op, + PatternRewriter &rewriter) const override = 0; + +protected: + /// Return a value yielded by `warpOp` which statifies the filter lamdba + /// condition and is not dead. + OpOperand *getWarpResult(WarpExecuteOnLane0Op warpOp, + llvm::function_ref fn) const; + + /// Helper to create a new WarpExecuteOnLane0Op with different signature. + WarpExecuteOnLane0Op moveRegionToNewWarpOpAndReplaceReturns( + RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, + ValueRange newYieldedValues, TypeRange newReturnTypes) const; + + /// Helper to create a new WarpExecuteOnLane0Op region with extra outputs. + /// `indices` return the index of each new output. + WarpExecuteOnLane0Op moveRegionToNewWarpOpAndAppendReturns( + RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, + ValueRange newYieldedValues, TypeRange newReturnTypes, + SmallVector &indices) const; + + /// Delinearize the given `laneId` into multiple dimensions, where each + /// dimension's size is determined by `originalShape` and `distributedShape` + /// together. This function expects the total numbers of threads needed for + /// distribution is equal to `warpSize`. Returns true and updates + /// `delinearizedIds` if so. + bool delinearizeLaneId(OpBuilder &builder, Location loc, + ArrayRef originalShape, + ArrayRef distributedShape, int64_t warpSize, + Value laneId, + SmallVectorImpl &delinearizedIds) const; +}; + +} // namespace mlir::gpu + +#endif // MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_ diff --git a/mlir/include/mlir/Dialect/GPU/Utils/GPUUtils.h b/mlir/include/mlir/Dialect/GPU/Utils/GPUUtils.h new file mode 100644 index 000000000000..073493971e6b --- /dev/null +++ b/mlir/include/mlir/Dialect/GPU/Utils/GPUUtils.h @@ -0,0 +1,53 @@ +//===- Passes.h - Pass Entrypoints ------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This header file defines utility functions exposed by the GPU dialect +// +//===----------------------------------------------------------------------===// + +#ifndef MLIR_DIALECT_GPU_TRANSFORMS_UTILS_H_ +#define MLIR_DIALECT_GPU_TRANSFORMS_UTILS_H_ + +#include "mlir/Dialect/GPU/IR/GPUDialect.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Support/LLVM.h" + +#include + +namespace mlir { +class Operation; +class Value; + +namespace gpu { +class GPUFuncOp; +class LaunchOp; + +/// Returns the matching vector combining kind. +vector::CombiningKind convertReductionKind(gpu::AllReduceOperation mode); +} // namespace gpu + +/// Get a gpu.func created from outlining the region of a gpu.launch op with the +/// given `kernelFnName`. The region of the `launchOp` can use values from +/// above. These need to be captured and passed as arguments to the generated +/// gpu.func. The generated function has arguments +/// - corresponding to the values passed in as `operands`, in that order. +/// - any additional values that might be used within the region of the +/// `launchOp` and defined above it. These captured values are appended to the +/// `operands` list. +gpu::GPUFuncOp outlineKernelFunc(gpu::LaunchOp launchOp, StringRef kernelFnName, + SmallVectorImpl &operands); + +/// Sink operations into the `launchOp` to reduce the number of values that are +/// used within the region of the operation, but defined outside of the +/// region. +LogicalResult sinkOperationsIntoLaunchOp( + gpu::LaunchOp launchOp, + llvm::function_ref isSinkingBeneficiary); + +} // namespace mlir +#endif // MLIR_DIALECT_GPU_TRANSFORMS_UTILS_H_ diff --git a/mlir/lib/Dialect/GPU/CMakeLists.txt b/mlir/lib/Dialect/GPU/CMakeLists.txt index a59645480aba..1026e9b50933 100644 --- a/mlir/lib/Dialect/GPU/CMakeLists.txt +++ b/mlir/lib/Dialect/GPU/CMakeLists.txt @@ -40,7 +40,6 @@ add_mlir_dialect_library(MLIRGPUTransforms Transforms/ShuffleRewriter.cpp Transforms/SPIRVAttachTarget.cpp Transforms/SubgroupReduceLowering.cpp - Transforms/Utils.cpp OBJECT @@ -59,6 +58,7 @@ add_mlir_dialect_library(MLIRGPUTransforms MLIRDataLayoutInterfaces MLIRExecutionEngineUtils MLIRGPUDialect + MLIRGPUUtils MLIRIR MLIRIndexDialect MLIRLLVMDialect @@ -76,3 +76,4 @@ add_mlir_dialect_library(MLIRGPUTransforms add_subdirectory(TransformOps) add_subdirectory(Pipelines) +add_subdirectory(Utils) diff --git a/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp b/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp index b2fa3a99c53f..41a5e39e5506 100644 --- a/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp @@ -16,7 +16,7 @@ #include "mlir/Dialect/Async/IR/Async.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/GPU/Transforms/Utils.h" +#include "mlir/Dialect/GPU/Utils/GPUUtils.h" #include "mlir/IR/Builders.h" #include "mlir/IR/IRMapping.h" #include "mlir/IR/PatternMatch.h" diff --git a/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp b/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp index ba0c80c50211..a6a36848b563 100644 --- a/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/KernelOutlining.cpp @@ -18,7 +18,7 @@ #include "mlir/Dialect/DLTI/DLTI.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" -#include "mlir/Dialect/GPU/Transforms/Utils.h" +#include "mlir/Dialect/GPU/Utils/GPUUtils.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinAttributes.h" diff --git a/mlir/lib/Dialect/GPU/Transforms/SubgroupReduceLowering.cpp b/mlir/lib/Dialect/GPU/Transforms/SubgroupReduceLowering.cpp index 185f824351a2..43eff3eddcc4 100644 --- a/mlir/lib/Dialect/GPU/Transforms/SubgroupReduceLowering.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/SubgroupReduceLowering.cpp @@ -13,7 +13,7 @@ #include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/GPU/Transforms/Passes.h" -#include "mlir/Dialect/GPU/Transforms/Utils.h" +#include "mlir/Dialect/GPU/Utils/GPUUtils.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/Location.h" diff --git a/mlir/lib/Dialect/GPU/Transforms/Utils.cpp b/mlir/lib/Dialect/GPU/Transforms/Utils.cpp deleted file mode 100644 index e91aa18128c7..000000000000 --- a/mlir/lib/Dialect/GPU/Transforms/Utils.cpp +++ /dev/null @@ -1,44 +0,0 @@ -//===- Utils.cpp - GPU transforms utils -----------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// Implements GPU dialect transforms utils. -// -//===----------------------------------------------------------------------===// - -#include "mlir/Dialect/GPU/Transforms/Utils.h" -#include "llvm/Support/ErrorHandling.h" - -namespace mlir::gpu { - -vector::CombiningKind convertReductionKind(gpu::AllReduceOperation mode) { - switch (mode) { -#define MAP_CASE(X) \ - case gpu::AllReduceOperation::X: \ - return vector::CombiningKind::X - - MAP_CASE(ADD); - MAP_CASE(MUL); - MAP_CASE(MINUI); - MAP_CASE(MINSI); - MAP_CASE(MINNUMF); - MAP_CASE(MAXSI); - MAP_CASE(MAXUI); - MAP_CASE(MAXNUMF); - MAP_CASE(AND); - MAP_CASE(OR); - MAP_CASE(XOR); - MAP_CASE(MINIMUMF); - MAP_CASE(MAXIMUMF); - -#undef MAP_CASE - } - - llvm_unreachable("Vector and GPU reduction kinds should match 1:1"); -} - -} // namespace mlir::gpu diff --git a/mlir/lib/Dialect/GPU/Utils/CMakeLists.txt b/mlir/lib/Dialect/GPU/Utils/CMakeLists.txt new file mode 100644 index 000000000000..69094c518a15 --- /dev/null +++ b/mlir/lib/Dialect/GPU/Utils/CMakeLists.txt @@ -0,0 +1,14 @@ +add_mlir_dialect_library(MLIRGPUUtils + Utils.cpp + DistributionUtils.cpp + + ADDITIONAL_HEADER_DIRS + ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/GPU/Utils + + LINK_LIBS PUBLIC + MLIRArithDialect + MLIRAffineDialect + MLIRGPUDialect + MLIRSupport + MLIRIR + ) diff --git a/mlir/lib/Dialect/GPU/Utils/DistributionUtils.cpp b/mlir/lib/Dialect/GPU/Utils/DistributionUtils.cpp new file mode 100644 index 000000000000..9d51ac3fc4bd --- /dev/null +++ b/mlir/lib/Dialect/GPU/Utils/DistributionUtils.cpp @@ -0,0 +1,144 @@ +//===- DistributionUtils.cpp - Distribution tools for GPUOps --------------===// +// +// Part of the MLIR Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements distribution utility methods. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Dialect/GPU/Utils/DistributionUtils.h" +#include "mlir/Dialect/Affine/IR/AffineOps.h" +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/IR/Value.h" + +#include + +using namespace mlir; +using namespace mlir::gpu; + +WarpExecuteOnLane0Op +WarpDistributionPattern::moveRegionToNewWarpOpAndReplaceReturns( + RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, + ValueRange newYieldedValues, TypeRange newReturnTypes) const { + // Create a new op before the existing one, with the extra operands. + OpBuilder::InsertionGuard g(rewriter); + rewriter.setInsertionPoint(warpOp); + auto newWarpOp = rewriter.create( + warpOp.getLoc(), newReturnTypes, warpOp.getLaneid(), warpOp.getWarpSize(), + warpOp.getArgs(), warpOp.getBody()->getArgumentTypes()); + + Region &opBody = warpOp.getBodyRegion(); + Region &newOpBody = newWarpOp.getBodyRegion(); + Block &newOpFirstBlock = newOpBody.front(); + rewriter.inlineRegionBefore(opBody, newOpBody, newOpBody.begin()); + rewriter.eraseBlock(&newOpFirstBlock); + assert(newWarpOp.getWarpRegion().hasOneBlock() && + "expected WarpOp with single block"); + + auto yield = + cast(newOpBody.getBlocks().begin()->getTerminator()); + + rewriter.modifyOpInPlace( + yield, [&]() { yield.getValuesMutable().assign(newYieldedValues); }); + return newWarpOp; +} + +WarpExecuteOnLane0Op +WarpDistributionPattern::moveRegionToNewWarpOpAndAppendReturns( + RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, + ValueRange newYieldedValues, TypeRange newReturnTypes, + SmallVector &indices) const { + SmallVector types(warpOp.getResultTypes().begin(), + warpOp.getResultTypes().end()); + auto yield = cast( + warpOp.getBodyRegion().getBlocks().begin()->getTerminator()); + llvm::SmallSetVector yieldValues(yield.getOperands().begin(), + yield.getOperands().end()); + for (auto [value, type] : llvm::zip_equal(newYieldedValues, newReturnTypes)) { + if (yieldValues.insert(value)) { + types.push_back(type); + indices.push_back(yieldValues.size() - 1); + } else { + // If the value already exit the region don't create a new output. + for (auto [idx, yieldOperand] : + llvm::enumerate(yieldValues.getArrayRef())) { + if (yieldOperand == value) { + indices.push_back(idx); + break; + } + } + } + } + yieldValues.insert(newYieldedValues.begin(), newYieldedValues.end()); + WarpExecuteOnLane0Op newWarpOp = moveRegionToNewWarpOpAndReplaceReturns( + rewriter, warpOp, yieldValues.getArrayRef(), types); + rewriter.replaceOp(warpOp, + newWarpOp.getResults().take_front(warpOp.getNumResults())); + return newWarpOp; +} + +OpOperand *WarpDistributionPattern::getWarpResult( + WarpExecuteOnLane0Op warpOp, + llvm::function_ref fn) const { + auto yield = cast( + warpOp.getBodyRegion().getBlocks().begin()->getTerminator()); + for (OpOperand &yieldOperand : yield->getOpOperands()) { + Value yieldValues = yieldOperand.get(); + Operation *definedOp = yieldValues.getDefiningOp(); + if (definedOp && fn(definedOp)) { + if (!warpOp.getResult(yieldOperand.getOperandNumber()).use_empty()) + return &yieldOperand; + } + } + return nullptr; +} + +bool WarpDistributionPattern::delinearizeLaneId( + OpBuilder &builder, Location loc, ArrayRef originalShape, + ArrayRef distributedShape, int64_t warpSize, Value laneId, + SmallVectorImpl &delinearizedIds) const { + // If the original shape and the distributed shape is the same, we don't + // distribute at all--every thread is handling the whole. For such case, we + // should not rely on lane IDs later. So just return an empty lane ID vector. + if (originalShape == distributedShape) { + delinearizedIds.clear(); + return true; + } + + SmallVector sizes; + for (auto [large, small] : llvm::zip_equal(originalShape, distributedShape)) { + if (large % small != 0) + return false; + sizes.push_back(large / small); + } + if (std::accumulate(sizes.begin(), sizes.end(), 1, + std::multiplies()) != warpSize) + return false; + + AffineExpr s0, s1; + bindSymbols(builder.getContext(), s0, s1); + + int64_t usedThreads = 1; + + Value zero = builder.create(loc, 0); + delinearizedIds.assign(sizes.size(), zero); + + for (int i = sizes.size() - 1; i >= 0; --i) { + usedThreads *= sizes[i]; + if (usedThreads == warpSize) { + // We've used up all available threads. Don't need to perform modulo + // anymore. And we can stop the calculation for further dimensions. + delinearizedIds[i] = laneId; + break; + } + delinearizedIds[i] = + affine::makeComposedAffineApply(builder, loc, s0 % sizes[i], {laneId}); + laneId = affine::makeComposedAffineApply( + builder, loc, s0.floorDiv(usedThreads), {laneId}); + } + return true; +} diff --git a/mlir/lib/Dialect/GPU/Utils/Utils.cpp b/mlir/lib/Dialect/GPU/Utils/Utils.cpp new file mode 100644 index 000000000000..1f09875b3e27 --- /dev/null +++ b/mlir/lib/Dialect/GPU/Utils/Utils.cpp @@ -0,0 +1,44 @@ +//===- Utils.cpp - GPU transforms utils -----------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Implements GPU dialect transforms utils. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Dialect/GPU/Utils/GPUUtils.h" +#include "llvm/Support/ErrorHandling.h" + +namespace mlir::gpu { + +vector::CombiningKind convertReductionKind(gpu::AllReduceOperation mode) { + switch (mode) { +#define MAP_CASE(X) \ + case gpu::AllReduceOperation::X: \ + return vector::CombiningKind::X + + MAP_CASE(ADD); + MAP_CASE(MUL); + MAP_CASE(MINUI); + MAP_CASE(MINSI); + MAP_CASE(MINNUMF); + MAP_CASE(MAXSI); + MAP_CASE(MAXUI); + MAP_CASE(MAXNUMF); + MAP_CASE(AND); + MAP_CASE(OR); + MAP_CASE(XOR); + MAP_CASE(MINIMUMF); + MAP_CASE(MAXIMUMF); + +#undef MAP_CASE + } + + llvm_unreachable("Vector and GPU reduction kinds should match 1:1"); +} + +} // namespace mlir::gpu diff --git a/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt b/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt index 9a3bd5d4593d..8ca5cb6c6dfa 100644 --- a/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt +++ b/mlir/lib/Dialect/Vector/Transforms/CMakeLists.txt @@ -38,6 +38,7 @@ add_mlir_dialect_library(MLIRVectorTransforms MLIRArithDialect MLIRDialectUtils MLIRGPUDialect + MLIRGPUUtils MLIRIR MLIRLinalgDialect MLIRMemRefDialect diff --git a/mlir/lib/Dialect/Vector/Transforms/VectorDistribute.cpp b/mlir/lib/Dialect/Vector/Transforms/VectorDistribute.cpp index 3e1425983699..e214257de2cd 100644 --- a/mlir/lib/Dialect/Vector/Transforms/VectorDistribute.cpp +++ b/mlir/lib/Dialect/Vector/Transforms/VectorDistribute.cpp @@ -9,6 +9,7 @@ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" +#include "mlir/Dialect/GPU/Utils/DistributionUtils.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/SCF/IR/SCF.h" #include "mlir/Dialect/Vector/IR/VectorOps.h" @@ -18,7 +19,6 @@ #include "mlir/Transforms/RegionUtils.h" #include "llvm/ADT/SetVector.h" #include "llvm/Support/FormatVariadic.h" -#include #include using namespace mlir; @@ -162,92 +162,6 @@ struct DistributedLoadStoreHelper { } // namespace -/// Helper to create a new WarpExecuteOnLane0Op with different signature. -static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndReplaceReturns( - RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, - ValueRange newYieldedValues, TypeRange newReturnTypes) { - // Create a new op before the existing one, with the extra operands. - OpBuilder::InsertionGuard g(rewriter); - rewriter.setInsertionPoint(warpOp); - auto newWarpOp = rewriter.create( - warpOp.getLoc(), newReturnTypes, warpOp.getLaneid(), warpOp.getWarpSize(), - warpOp.getArgs(), warpOp.getBody()->getArgumentTypes()); - - Region &opBody = warpOp.getBodyRegion(); - Region &newOpBody = newWarpOp.getBodyRegion(); - Block &newOpFirstBlock = newOpBody.front(); - rewriter.inlineRegionBefore(opBody, newOpBody, newOpBody.begin()); - rewriter.eraseBlock(&newOpFirstBlock); - assert(newWarpOp.getWarpRegion().hasOneBlock() && - "expected WarpOp with single block"); - - auto yield = - cast(newOpBody.getBlocks().begin()->getTerminator()); - - rewriter.modifyOpInPlace( - yield, [&]() { yield.getValuesMutable().assign(newYieldedValues); }); - return newWarpOp; -} - -/// Helper to create a new WarpExecuteOnLane0Op region with extra outputs. -/// `indices` return the index of each new output. -static WarpExecuteOnLane0Op moveRegionToNewWarpOpAndAppendReturns( - RewriterBase &rewriter, WarpExecuteOnLane0Op warpOp, - ValueRange newYieldedValues, TypeRange newReturnTypes, - llvm::SmallVector &indices) { - SmallVector types(warpOp.getResultTypes().begin(), - warpOp.getResultTypes().end()); - auto yield = cast( - warpOp.getBodyRegion().getBlocks().begin()->getTerminator()); - llvm::SmallSetVector yieldValues(yield.getOperands().begin(), - yield.getOperands().end()); - for (auto newRet : llvm::zip(newYieldedValues, newReturnTypes)) { - if (yieldValues.insert(std::get<0>(newRet))) { - types.push_back(std::get<1>(newRet)); - indices.push_back(yieldValues.size() - 1); - } else { - // If the value already exit the region don't create a new output. - for (auto [idx, yieldOperand] : - llvm::enumerate(yieldValues.getArrayRef())) { - if (yieldOperand == std::get<0>(newRet)) { - indices.push_back(idx); - break; - } - } - } - } - yieldValues.insert(newYieldedValues.begin(), newYieldedValues.end()); - WarpExecuteOnLane0Op newWarpOp = moveRegionToNewWarpOpAndReplaceReturns( - rewriter, warpOp, yieldValues.getArrayRef(), types); - rewriter.replaceOp(warpOp, - newWarpOp.getResults().take_front(warpOp.getNumResults())); - return newWarpOp; -} - -/// Helper to know if an op can be hoisted out of the region. -static bool canBeHoisted(Operation *op, - function_ref definedOutside) { - return llvm::all_of(op->getOperands(), definedOutside) && - isMemoryEffectFree(op) && op->getNumRegions() == 0; -} - -/// Return a value yielded by `warpOp` which statifies the filter lamdba -/// condition and is not dead. -static OpOperand *getWarpResult(WarpExecuteOnLane0Op warpOp, - const std::function &fn) { - auto yield = cast( - warpOp.getBodyRegion().getBlocks().begin()->getTerminator()); - for (OpOperand &yieldOperand : yield->getOpOperands()) { - Value yieldValues = yieldOperand.get(); - Operation *definedOp = yieldValues.getDefiningOp(); - if (definedOp && fn(definedOp)) { - if (!warpOp.getResult(yieldOperand.getOperandNumber()).use_empty()) - return &yieldOperand; - } - } - return {}; -} - // Clones `op` into a new operation that takes `operands` and returns // `resultTypes`. static Operation *cloneOpWithOperandsAndTypes(RewriterBase &rewriter, @@ -289,12 +203,11 @@ namespace { /// /// All this assumes the vector distribution occurs along the most minor /// distributed vector dimension. -struct WarpOpToScfIfPattern : public OpRewritePattern { +struct WarpOpToScfIfPattern : public WarpDistributionPattern { WarpOpToScfIfPattern(MLIRContext *context, const WarpExecuteOnLane0LoweringOptions &options, PatternBenefit benefit = 1) - : OpRewritePattern(context, benefit), - options(options) {} + : WarpDistributionPattern(context, benefit), options(options) {} LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { @@ -402,39 +315,6 @@ private: const WarpExecuteOnLane0LoweringOptions &options; }; -/// Clone `writeOp` assumed to be nested under `warpOp` into a new warp execute -/// op with the proper return type. -/// The new write op is updated to write the result of the new warp execute op. -/// The old `writeOp` is deleted. -static vector::TransferWriteOp cloneWriteOp(RewriterBase &rewriter, - WarpExecuteOnLane0Op warpOp, - vector::TransferWriteOp writeOp, - VectorType targetType, - VectorType maybeMaskType) { - assert(writeOp->getParentOp() == warpOp && - "write must be nested immediately under warp"); - OpBuilder::InsertionGuard g(rewriter); - SmallVector newRetIndices; - WarpExecuteOnLane0Op newWarpOp; - if (maybeMaskType) { - newWarpOp = moveRegionToNewWarpOpAndAppendReturns( - rewriter, warpOp, ValueRange{writeOp.getVector(), writeOp.getMask()}, - TypeRange{targetType, maybeMaskType}, newRetIndices); - } else { - newWarpOp = moveRegionToNewWarpOpAndAppendReturns( - rewriter, warpOp, ValueRange{{writeOp.getVector()}}, - TypeRange{targetType}, newRetIndices); - } - rewriter.setInsertionPointAfter(newWarpOp); - auto newWriteOp = - cast(rewriter.clone(*writeOp.getOperation())); - rewriter.eraseOp(writeOp); - newWriteOp.getVectorMutable().assign(newWarpOp.getResult(newRetIndices[0])); - if (maybeMaskType) - newWriteOp.getMaskMutable().assign(newWarpOp.getResult(newRetIndices[1])); - return newWriteOp; -} - /// Return the distributed vector type based on the original type and the /// distribution map. The map is expected to have a dimension equal to the /// original type rank and should be a projection where the results are the @@ -487,11 +367,10 @@ static VectorType getDistributedType(VectorType originalType, AffineMap map, /// gpu.yield %v : vector<32xf32> /// } /// vector.transfer_write %v, %A[%id] : vector<1xf32>, memref<128xf32> -struct WarpOpTransferWrite : public OpRewritePattern { +struct WarpOpTransferWrite : public WarpDistributionPattern { WarpOpTransferWrite(MLIRContext *ctx, DistributionMapFn fn, unsigned maxNumElementsToExtract, PatternBenefit b = 1) - : OpRewritePattern(ctx, b), - distributionMapFn(std::move(fn)), + : WarpDistributionPattern(ctx, b), distributionMapFn(std::move(fn)), maxNumElementsToExtract(maxNumElementsToExtract) {} /// Distribute the TransferWriteOp. Only 1D distributions and vector dims that @@ -654,6 +533,38 @@ struct WarpOpTransferWrite : public OpRewritePattern { } private: + /// Clone `writeOp` assumed to be nested under `warpOp` into a new warp + /// execute op with the proper return type. The new write op is updated to + /// write the result of the new warp execute op. The old `writeOp` is deleted. + vector::TransferWriteOp cloneWriteOp(RewriterBase &rewriter, + WarpExecuteOnLane0Op warpOp, + vector::TransferWriteOp writeOp, + VectorType targetType, + VectorType maybeMaskType) const { + assert(writeOp->getParentOp() == warpOp && + "write must be nested immediately under warp"); + OpBuilder::InsertionGuard g(rewriter); + SmallVector newRetIndices; + WarpExecuteOnLane0Op newWarpOp; + if (maybeMaskType) { + newWarpOp = moveRegionToNewWarpOpAndAppendReturns( + rewriter, warpOp, ValueRange{writeOp.getVector(), writeOp.getMask()}, + TypeRange{targetType, maybeMaskType}, newRetIndices); + } else { + newWarpOp = moveRegionToNewWarpOpAndAppendReturns( + rewriter, warpOp, ValueRange{{writeOp.getVector()}}, + TypeRange{targetType}, newRetIndices); + } + rewriter.setInsertionPointAfter(newWarpOp); + auto newWriteOp = + cast(rewriter.clone(*writeOp.getOperation())); + rewriter.eraseOp(writeOp); + newWriteOp.getVectorMutable().assign(newWarpOp.getResult(newRetIndices[0])); + if (maybeMaskType) + newWriteOp.getMaskMutable().assign(newWarpOp.getResult(newRetIndices[1])); + return newWriteOp; + } + DistributionMapFn distributionMapFn; unsigned maxNumElementsToExtract = 1; }; @@ -676,8 +587,8 @@ private: /// vector<32xf32> /// } /// %0 = arith.addf %r#1, %r#2 : vector<1xf32> -struct WarpOpElementwise : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpElementwise : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *yieldOperand = getWarpResult(warpOp, [](Operation *op) { @@ -742,8 +653,8 @@ struct WarpOpElementwise : public OpRewritePattern { /// ... /// } /// %0 = arith.constant dense<2.0> : vector<1xf32> -struct WarpOpConstant : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpConstant : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *yieldOperand = @@ -770,57 +681,6 @@ struct WarpOpConstant : public OpRewritePattern { } }; -/// Delinearize the given `laneId` into multiple dimensions, where each -/// dimension's size is determined by `originalShape` and `distributedShape` -/// together. This function expects the total numbers of threads needed for -/// distribution is equal to `warpSize`. Returns true and updates -/// `delinearizedIds` if so. -bool delinearizeLaneId(OpBuilder &builder, Location loc, - ArrayRef originalShape, - ArrayRef distributedShape, int64_t warpSize, - Value laneId, SmallVectorImpl &delinearizedIds) { - // If the original shape and the distributed shape is the same, we don't - // distribute at all--every thread is handling the whole. For such case, we - // should not rely on lane IDs later. So just return an empty lane ID vector. - if (originalShape == distributedShape) { - delinearizedIds.clear(); - return true; - } - - SmallVector sizes; - for (auto [large, small] : llvm::zip_equal(originalShape, distributedShape)) { - if (large % small != 0) - return false; - sizes.push_back(large / small); - } - if (std::accumulate(sizes.begin(), sizes.end(), 1, - std::multiplies()) != warpSize) - return false; - - AffineExpr s0, s1; - bindSymbols(builder.getContext(), s0, s1); - - int64_t usedThreads = 1; - - Value zero = builder.create(loc, 0); - delinearizedIds.assign(sizes.size(), zero); - - for (int i = sizes.size() - 1; i >= 0; --i) { - usedThreads *= sizes[i]; - if (usedThreads == warpSize) { - // We've used up all available threads. Don't need to perform modulo - // anymore. And we can stop the calculation for further dimensions. - delinearizedIds[i] = laneId; - break; - } - delinearizedIds[i] = - affine::makeComposedAffineApply(builder, loc, s0 % sizes[i], {laneId}); - laneId = affine::makeComposedAffineApply( - builder, loc, s0.floorDiv(usedThreads), {laneId}); - } - return true; -} - /// Sink out transfer_read op feeding into a warp op yield. /// ``` /// %0 = gpu.warp_execute_on_lane_0(%arg0) -> (vector<1xf32>) { @@ -839,8 +699,8 @@ bool delinearizeLaneId(OpBuilder &builder, Location loc, /// vector<32xf32> gpu.yield %2 : vector<32xf32> /// } /// %0 = vector.transfer_read %src[%c0], %cst : memref<1024xf32>, vector<1xf32> -struct WarpOpTransferRead : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpTransferRead : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { // Try to find a distributable yielded read. Note that this pattern can @@ -951,8 +811,8 @@ struct WarpOpTransferRead : public OpRewritePattern { /// Remove any result that has no use along with the matching yieldOp operand. // TODO: Move this in WarpExecuteOnLane0Op canonicalization. -struct WarpOpDeadResult : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpDeadResult : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { SmallVector newResultTypes; @@ -1012,8 +872,8 @@ struct WarpOpDeadResult : public OpRewritePattern { // If an operand is directly yielded out of the region we can forward it // directly and it doesn't need to go through the region. -struct WarpOpForwardOperand : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpForwardOperand : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { SmallVector resultTypes; @@ -1056,8 +916,8 @@ struct WarpOpForwardOperand : public OpRewritePattern { } }; -struct WarpOpBroadcast : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpBroadcast : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = @@ -1093,8 +953,8 @@ struct WarpOpBroadcast : public OpRewritePattern { /// Pattern to move shape cast out of the warp op. shape cast is basically a /// no-op for warp distribution; we need to handle the shape though. -struct WarpOpShapeCast : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpShapeCast : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = @@ -1152,8 +1012,8 @@ struct WarpOpShapeCast : public OpRewritePattern { /// %cmp = arith.cmpi ult, %laneid, %0 /// %ub = arith.select %cmp, %c0, %c1 /// %1 = vector.create_mask %ub : vector<1xi1> -struct WarpOpCreateMask : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpCreateMask : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *yieldOperand = @@ -1218,8 +1078,8 @@ struct WarpOpCreateMask : public OpRewritePattern { /// Pattern to move out vector.extract of single element vector. Those don't /// need to be distributed and can just be propagated outside of the region. -struct WarpOpExtract : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; +struct WarpOpExtract : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = @@ -1298,11 +1158,10 @@ struct WarpOpExtract : public OpRewritePattern { /// Pattern to move out vector.extract with a scalar result. /// Only supports 1-D and 0-D sources for now. -struct WarpOpExtractScalar : public OpRewritePattern { +struct WarpOpExtractScalar : public WarpDistributionPattern { WarpOpExtractScalar(MLIRContext *ctx, WarpShuffleFromIdxFn fn, PatternBenefit b = 1) - : OpRewritePattern(ctx, b), - warpShuffleFromIdxFn(std::move(fn)) {} + : WarpDistributionPattern(ctx, b), warpShuffleFromIdxFn(std::move(fn)) {} LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = @@ -1397,9 +1256,8 @@ private: }; /// Pattern to convert vector.extractelement to vector.extract. -struct WarpOpExtractElement : public OpRewritePattern { - WarpOpExtractElement(MLIRContext *ctx, PatternBenefit b = 1) - : OpRewritePattern(ctx, b) {} +struct WarpOpExtractElement : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = @@ -1420,9 +1278,8 @@ struct WarpOpExtractElement : public OpRewritePattern { /// Pattern to move out vector.insert with a scalar input. /// Only supports 1-D and 0-D destinations for now. -struct WarpOpInsertScalar : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; - +struct WarpOpInsertScalar : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = getWarpResult(warpOp, llvm::IsaPred); @@ -1513,9 +1370,8 @@ struct WarpOpInsertScalar : public OpRewritePattern { } }; -struct WarpOpInsert : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; - +struct WarpOpInsert : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = getWarpResult(warpOp, llvm::IsaPred); @@ -1627,9 +1483,8 @@ struct WarpOpInsert : public OpRewritePattern { } }; -struct WarpOpInsertElement : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; - +struct WarpOpInsertElement : public WarpDistributionPattern { + using Base::Base; LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { OpOperand *operand = @@ -1680,12 +1535,10 @@ struct WarpOpInsertElement : public OpRewritePattern { /// scf.yield %iw : vector<4xf32> /// } /// ``` -struct WarpOpScfForOp : public OpRewritePattern { +struct WarpOpScfForOp : public WarpDistributionPattern { WarpOpScfForOp(MLIRContext *ctx, DistributionMapFn fn, PatternBenefit b = 1) - : OpRewritePattern(ctx, b), - distributionMapFn(std::move(fn)) {} - using OpRewritePattern::OpRewritePattern; + : WarpDistributionPattern(ctx, b), distributionMapFn(std::move(fn)) {} LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, PatternRewriter &rewriter) const override { auto yield = cast( @@ -1824,11 +1677,11 @@ private: /// %a = vector.extract %0[0] : f32 from vector<1xf32> /// %r = ("warp.reduction %a") /// ``` -struct WarpOpReduction : public OpRewritePattern { +struct WarpOpReduction : public WarpDistributionPattern { WarpOpReduction(MLIRContext *context, DistributedReductionFn distributedReductionFn, PatternBenefit benefit = 1) - : OpRewritePattern(context, benefit), + : WarpDistributionPattern(context, benefit), distributedReductionFn(std::move(distributedReductionFn)) {} LogicalResult matchAndRewrite(WarpExecuteOnLane0Op warpOp, @@ -1927,6 +1780,13 @@ void mlir::vector::populateDistributeReduction( benefit); } +/// Helper to know if an op can be hoisted out of the region. +static bool canBeHoisted(Operation *op, + function_ref definedOutside) { + return llvm::all_of(op->getOperands(), definedOutside) && + isMemoryEffectFree(op) && op->getNumRegions() == 0; +} + void mlir::vector::moveScalarUniformCode(WarpExecuteOnLane0Op warpOp) { Block *body = warpOp.getBody(); -- cgit v1.2.3 From 05860f9b384b9b8f8bb01fa8984dbc2833669a27 Mon Sep 17 00:00:00 2001 From: Ryosuke Niwa Date: Fri, 13 Dec 2024 01:48:29 -0800 Subject: [WebKit checkers] Recognize ensureFoo functions (#119681) In WebKit, we often write Foo::ensureBar function which lazily initializes m_bar and returns a raw pointer or a raw reference to m_bar. Such a return value is safe to use for the duration of a member function call in Foo so long as m_bar is const so that it never gets unset or updated with a new value once it's initialized. This PR adds support for recognizing these types of functions and treating its return value as a safe origin of a function argument (including "this") or a local variable. --- .../StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp | 42 +++++++++++++++ .../lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h | 10 ++++ .../Checkers/WebKit/RawPtrRefCallArgsChecker.cpp | 5 +- .../Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp | 4 ++ .../WebKit/call-args-checked-const-member.cpp | 29 ++++++++++ .../Checkers/WebKit/call-args-checked-ptr.cpp | 2 +- .../WebKit/call-args-counted-const-member.cpp | 29 ++++++++++ clang/test/Analysis/Checkers/WebKit/call-args.cpp | 2 +- .../WebKit/local-vars-checked-const-member.cpp | 33 ++++++++++++ .../WebKit/local-vars-counted-const-member.cpp | 33 ++++++++++++ clang/test/Analysis/Checkers/WebKit/mock-types.h | 61 ++++++++++++---------- 11 files changed, 218 insertions(+), 32 deletions(-) diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp index 69b63240d207..abf5d3ec193a 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp @@ -13,6 +13,7 @@ #include "clang/AST/DeclCXX.h" #include "clang/AST/ExprCXX.h" #include "clang/AST/ExprObjC.h" +#include "clang/AST/StmtVisitor.h" #include namespace clang { @@ -158,6 +159,9 @@ bool isConstOwnerPtrMemberExpr(const clang::Expr *E) { E = ThisArg; } } + } else if (auto *OCE = dyn_cast(E)) { + if (OCE->getOperator() == OO_Star && OCE->getNumArgs() == 1) + E = OCE->getArg(0); } auto *ME = dyn_cast(E); if (!ME) @@ -169,4 +173,42 @@ bool isConstOwnerPtrMemberExpr(const clang::Expr *E) { return isOwnerPtrType(T) && T.isConstQualified(); } +class EnsureFunctionVisitor + : public ConstStmtVisitor { +public: + bool VisitStmt(const Stmt *S) { + for (const Stmt *Child : S->children()) { + if (Child && !Visit(Child)) + return false; + } + return true; + } + + bool VisitReturnStmt(const ReturnStmt *RS) { + if (auto *RV = RS->getRetValue()) { + RV = RV->IgnoreParenCasts(); + if (isa(RV)) + return true; + return isConstOwnerPtrMemberExpr(RV); + } + return false; + } +}; + +bool EnsureFunctionAnalysis::isACallToEnsureFn(const clang::Expr *E) const { + auto *MCE = dyn_cast(E); + if (!MCE) + return false; + auto *Callee = MCE->getDirectCallee(); + if (!Callee) + return false; + auto *Body = Callee->getBody(); + if (!Body) + return false; + auto [CacheIt, IsNew] = Cache.insert(std::make_pair(Callee, false)); + if (IsNew) + CacheIt->second = EnsureFunctionVisitor().Visit(Body); + return CacheIt->second; +} + } // namespace clang diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h index ddbef0fba044..b508043d0f37 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h @@ -67,6 +67,16 @@ bool isASafeCallArg(const clang::Expr *E); /// \returns true if E is a MemberExpr accessing a const smart pointer type. bool isConstOwnerPtrMemberExpr(const clang::Expr *E); +/// \returns true if E is a CXXMemberCallExpr which returns a const smart +/// pointer type. +class EnsureFunctionAnalysis { + using CacheTy = llvm::DenseMap; + mutable CacheTy Cache{}; + +public: + bool isACallToEnsureFn(const Expr *E) const; +}; + /// \returns name of AST node or empty string. template std::string safeGetName(const T *ASTNode) { const auto *const ND = llvm::dyn_cast_or_null(ASTNode); diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp index ef2d42ccada6..56fa72c100ec 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp @@ -33,6 +33,7 @@ class RawPtrRefCallArgsChecker mutable BugReporter *BR; TrivialFunctionAnalysis TFA; + EnsureFunctionAnalysis EFA; public: RawPtrRefCallArgsChecker(const char *description) @@ -140,7 +141,7 @@ public: bool isPtrOriginSafe(const Expr *Arg) const { return tryToFindPtrOrigin(Arg, /*StopAtFirstRefCountedObj=*/true, - [](const clang::Expr *ArgOrigin, bool IsSafe) { + [&](const clang::Expr *ArgOrigin, bool IsSafe) { if (IsSafe) return true; if (isa(ArgOrigin)) { @@ -154,6 +155,8 @@ public: } if (isASafeCallArg(ArgOrigin)) return true; + if (EFA.isACallToEnsureFn(ArgOrigin)) + return true; return false; }); } diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp index bb580b06e2c5..d58666839950 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp @@ -166,6 +166,7 @@ class RawPtrRefLocalVarsChecker : public Checker> { BugType Bug; mutable BugReporter *BR; + EnsureFunctionAnalysis EFA; public: RawPtrRefLocalVarsChecker(const char *description) @@ -278,6 +279,9 @@ public: if (isConstOwnerPtrMemberExpr(InitArgOrigin)) return true; + if (EFA.isACallToEnsureFn(InitArgOrigin)) + return true; + if (auto *Ref = llvm::dyn_cast(InitArgOrigin)) { if (auto *MaybeGuardian = dyn_cast_or_null(Ref->getFoundDecl())) { diff --git a/clang/test/Analysis/Checkers/WebKit/call-args-checked-const-member.cpp b/clang/test/Analysis/Checkers/WebKit/call-args-checked-const-member.cpp index 76f80a12c170..f7095606c77a 100644 --- a/clang/test/Analysis/Checkers/WebKit/call-args-checked-const-member.cpp +++ b/clang/test/Analysis/Checkers/WebKit/call-args-checked-const-member.cpp @@ -49,15 +49,44 @@ public: Foo(); void bar(); + CheckedObj& ensureObj3() { + if (!m_obj3) + const_cast&>(m_obj3) = new CheckedObj; + return *m_obj3; + } + + CheckedObj& badEnsureObj4() { + if (!m_obj4) + const_cast&>(m_obj4) = new CheckedObj; + if (auto* next = m_obj4->next()) + return *next; + return *m_obj4; + } + + CheckedObj* ensureObj5() { + if (!m_obj5) + const_cast&>(m_obj5) = new CheckedObj; + if (m_obj5->next()) + return nullptr; + return m_obj5.get(); + } + private: const std::unique_ptr m_obj1; std::unique_ptr m_obj2; + const std::unique_ptr m_obj3; + const std::unique_ptr m_obj4; + const std::unique_ptr m_obj5; }; void Foo::bar() { m_obj1->method(); m_obj2->method(); // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}} + ensureObj3().method(); + badEnsureObj4().method(); + // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}} + ensureObj5()->method(); } } // namespace call_args_const_unique_ptr diff --git a/clang/test/Analysis/Checkers/WebKit/call-args-checked-ptr.cpp b/clang/test/Analysis/Checkers/WebKit/call-args-checked-ptr.cpp index 072bceedcf96..59f247d6d007 100644 --- a/clang/test/Analysis/Checkers/WebKit/call-args-checked-ptr.cpp +++ b/clang/test/Analysis/Checkers/WebKit/call-args-checked-ptr.cpp @@ -117,7 +117,7 @@ namespace null_ptr { namespace ref_counted_lookalike { struct Decoy { - CheckedObj* get() { return nullptr; } + CheckedObj* get(); }; void foo() { diff --git a/clang/test/Analysis/Checkers/WebKit/call-args-counted-const-member.cpp b/clang/test/Analysis/Checkers/WebKit/call-args-counted-const-member.cpp index b3296507a5c9..215238a7fcf0 100644 --- a/clang/test/Analysis/Checkers/WebKit/call-args-counted-const-member.cpp +++ b/clang/test/Analysis/Checkers/WebKit/call-args-counted-const-member.cpp @@ -52,15 +52,44 @@ public: Foo(); void bar(); + RefCountable& ensureObj3() { + if (!m_obj3) + const_cast&>(m_obj3) = RefCountable::makeUnique(); + return *m_obj3; + } + + RefCountable& badEnsureObj4() { + if (!m_obj4) + const_cast&>(m_obj4) = RefCountable::makeUnique(); + if (auto* next = m_obj4->next()) + return *next; + return *m_obj4; + } + + RefCountable* ensureObj5() { + if (!m_obj5) + const_cast&>(m_obj5) = RefCountable::makeUnique(); + if (m_obj5->next()) + return nullptr; + return m_obj5.get(); + } + private: const std::unique_ptr m_obj1; std::unique_ptr m_obj2; + const std::unique_ptr m_obj3; + const std::unique_ptr m_obj4; + const std::unique_ptr m_obj5; }; void Foo::bar() { m_obj1->method(); m_obj2->method(); // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}} + ensureObj3().method(); + badEnsureObj4().method(); + // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}} + ensureObj5()->method(); } } // namespace call_args_const_unique_ptr diff --git a/clang/test/Analysis/Checkers/WebKit/call-args.cpp b/clang/test/Analysis/Checkers/WebKit/call-args.cpp index 9920690746da..2146eae9975b 100644 --- a/clang/test/Analysis/Checkers/WebKit/call-args.cpp +++ b/clang/test/Analysis/Checkers/WebKit/call-args.cpp @@ -117,7 +117,7 @@ namespace null_ptr { namespace ref_counted_lookalike { struct Decoy { - RefCountable* get() { return nullptr; } + RefCountable* get(); }; void foo() { diff --git a/clang/test/Analysis/Checkers/WebKit/local-vars-checked-const-member.cpp b/clang/test/Analysis/Checkers/WebKit/local-vars-checked-const-member.cpp index e52d1e735f63..be04cf26be2e 100644 --- a/clang/test/Analysis/Checkers/WebKit/local-vars-checked-const-member.cpp +++ b/clang/test/Analysis/Checkers/WebKit/local-vars-checked-const-member.cpp @@ -12,9 +12,36 @@ public: Foo(); void bar(); + CheckedObj& ensureObj3() { + if (!m_obj3) + const_cast&>(m_obj3) = new CheckedObj; + return *m_obj3; + } + + CheckedObj& ensureObj4() { + if (!m_obj4) + const_cast&>(m_obj4) = new CheckedObj; + if (auto* next = m_obj4->next()) { + // expected-warning@-1{{Local variable 'next' is unchecked and unsafe [alpha.webkit.UncheckedLocalVarsChecker]}} + return *next; + } + return *m_obj4; + } + + CheckedObj* ensureObj5() { + if (!m_obj5) + const_cast&>(m_obj5) = new CheckedObj; + if (m_obj5->next()) + return nullptr; + return m_obj5.get(); + } + private: const CheckedPtr m_obj1; CheckedPtr m_obj2; + const CheckedPtr m_obj3; + const CheckedPtr m_obj4; + const CheckedPtr m_obj5; }; void Foo::bar() { @@ -23,6 +50,12 @@ void Foo::bar() { auto* obj2 = m_obj2.get(); // expected-warning@-1{{Local variable 'obj2' is unchecked and unsafe [alpha.webkit.UncheckedLocalVarsChecker]}} obj2->method(); + auto& obj3 = ensureObj3(); + obj3.method(); + auto& obj4 = ensureObj4(); + // expected-warning@-1{{Local variable 'obj4' is unchecked and unsafe [alpha.webkit.UncheckedLocalVarsChecker]}} + obj4.method(); + auto* obj5 = ensureObj5(); } } // namespace local_vars_const_checkedptr_member diff --git a/clang/test/Analysis/Checkers/WebKit/local-vars-counted-const-member.cpp b/clang/test/Analysis/Checkers/WebKit/local-vars-counted-const-member.cpp index 03d16285f88b..e12c9b900a42 100644 --- a/clang/test/Analysis/Checkers/WebKit/local-vars-counted-const-member.cpp +++ b/clang/test/Analysis/Checkers/WebKit/local-vars-counted-const-member.cpp @@ -12,9 +12,36 @@ public: Foo(); void bar(); + RefCountable& ensureObj3() { + if (!m_obj3) + const_cast&>(m_obj3) = RefCountable::create(); + return *m_obj3; + } + + RefCountable& ensureObj4() { + if (!m_obj4) + const_cast&>(m_obj4) = RefCountable::create(); + if (auto* next = m_obj4->next()) { + // expected-warning@-1{{Local variable 'next' is uncounted and unsafe [alpha.webkit.UncountedLocalVarsChecker]}} + return *next; + } + return *m_obj4; + } + + RefCountable* ensureObj5() { + if (!m_obj5) + const_cast&>(m_obj5) = RefCountable::create(); + if (m_obj5->next()) + return nullptr; + return m_obj5.get(); + } + private: const RefPtr m_obj1; RefPtr m_obj2; + const RefPtr m_obj3; + const RefPtr m_obj4; + const RefPtr m_obj5; }; void Foo::bar() { @@ -23,6 +50,12 @@ void Foo::bar() { auto* obj2 = m_obj2.get(); // expected-warning@-1{{Local variable 'obj2' is uncounted and unsafe [alpha.webkit.UncountedLocalVarsChecker]}} obj2->method(); + auto& obj3 = ensureObj3(); + obj3.method(); + auto& obj4 = ensureObj4(); + // expected-warning@-1{{Local variable 'obj4' is uncounted and unsafe [alpha.webkit.UncountedLocalVarsChecker]}} + obj4.method(); + auto* obj5 = ensureObj5(); } } // namespace local_vars_const_refptr_member diff --git a/clang/test/Analysis/Checkers/WebKit/mock-types.h b/clang/test/Analysis/Checkers/WebKit/mock-types.h index fb1ee51c7ec1..f3bd20f8bcf6 100644 --- a/clang/test/Analysis/Checkers/WebKit/mock-types.h +++ b/clang/test/Analysis/Checkers/WebKit/mock-types.h @@ -1,6 +1,34 @@ #ifndef mock_types_1103988513531 #define mock_types_1103988513531 +namespace std { + +template +class unique_ptr { +private: + T *t; + +public: + unique_ptr() : t(nullptr) { } + unique_ptr(T *t) : t(t) { } + ~unique_ptr() { + if (t) + delete t; + } + template unique_ptr(unique_ptr&& u) + : t(u.t) + { + u.t = nullptr; + } + T *get() const { return t; } + T *operator->() const { return t; } + T &operator*() const { return *t; } + unique_ptr &operator=(T *) { return *this; } + explicit operator bool() const { return !!t; } +}; + +}; + template struct RawPtrTraits { using StorageType = T*; @@ -103,7 +131,7 @@ template struct RefPtr { } T *get() const { return t; } T *operator->() const { return t; } - T &operator*() { return *t; } + T &operator*() const { return *t; } RefPtr &operator=(T *t) { RefPtr o(t); swap(o); @@ -130,6 +158,7 @@ template bool operator!=(const RefPtr &, T &) { return false; } struct RefCountable { static Ref create(); + static std::unique_ptr makeUnique(); void ref() {} void deref() {} void method(); @@ -176,7 +205,7 @@ public: } T *get() const { return t; } T *operator->() const { return t; } - T &operator*() { return *t; } + T &operator*() const { return *t; } CheckedPtr &operator=(T *) { return *this; } operator bool() const { return t; } }; @@ -187,6 +216,7 @@ public: void decrementCheckedPtrCount(); void method(); int trivial() { return 123; } + CheckedObj* next(); }; class RefCountableAndCheckable { @@ -220,31 +250,4 @@ public: UniqueRef &operator=(T &) { return *this; } }; -namespace std { - -template -class unique_ptr { -private: - T *t; - -public: - unique_ptr() : t(nullptr) { } - unique_ptr(T *t) : t(t) { } - ~unique_ptr() { - if (t) - delete t; - } - template unique_ptr(unique_ptr&& u) - : t(u.t) - { - u.t = nullptr; - } - T *get() const { return t; } - T *operator->() const { return t; } - T &operator*() { return *t; } - unique_ptr &operator=(T *) { return *this; } -}; - -}; - #endif -- cgit v1.2.3 From 473e2518e850598feae62916ebef4b4dbc88a0ee Mon Sep 17 00:00:00 2001 From: GeorgeKA Date: Fri, 13 Dec 2024 04:50:12 -0500 Subject: [clang] Document the return value of __builtin_COLUMN (#118360) PR for issue #78657 Updated clang/docs/LanguageExtensions.rst to detail the return value of __builtin_COLUMN for this implementation. -- Fyi, this is my first contribution, so please bear with me. There already appears to be a unit test for __builtin_COLUMN in clang/test/SemaCXX/source_location.cpp. --- clang/docs/LanguageExtensions.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst index 54b6f947a6a5..3d4f68b818bc 100644 --- a/clang/docs/LanguageExtensions.rst +++ b/clang/docs/LanguageExtensions.rst @@ -4526,9 +4526,13 @@ default member initializer, the invocation point is the location of the constructor or aggregate initialization used to create the object. Otherwise the invocation point is the same as the location of the builtin. -When the invocation point of ``__builtin_FUNCTION`` is not a function scope the +When the invocation point of ``__builtin_FUNCTION`` is not a function scope, the empty string is returned. +The builtin ``__builtin_COLUMN`` returns the offset from the start of the line, +beginning from column 1. `This may differ from other implementations. +`_ + The builtin ``__builtin_source_location`` returns a pointer to constant static data of type ``std::source_location::__impl``. This type must have already been defined, and must contain exactly four fields: ``const char *_M_file_name``, -- cgit v1.2.3 From 79f41434460d3305c889a6483ea59f1e3ea19b5a Mon Sep 17 00:00:00 2001 From: Matthias Springer Date: Fri, 13 Dec 2024 11:26:12 +0100 Subject: [mlir][Transforms] Dialect conversion: Move `hasRewrite` to expensive checks (#119848) The dialect conversion has various checks that detect incorrect API usage in patterns. One of these checks turned out to be quite expensive (N*M complexity where N is the number of block rewrites and M is the total number of rewrites) in NVIDIA-internal workloads: Checking that a block is not converted multiple times. This check iterates over the stack of all rewrites, which can be large. We saw `hasRewrite` being called around 45000 times with an average rewrite stack size of 500000. This PR moves the check to `MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS`. For consistency reasons, the other `hasRewrite`-based check is also moved there. --- mlir/lib/Transforms/Utils/DialectConversion.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp index cedf645e2985..1607740a1ee0 100644 --- a/mlir/lib/Transforms/Utils/DialectConversion.cpp +++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp @@ -714,6 +714,7 @@ private: }; } // namespace +#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS /// Return "true" if there is an operation rewrite that matches the specified /// rewrite type and operation among the given rewrites. template @@ -724,7 +725,6 @@ static bool hasRewrite(R &&rewrites, Operation *op) { }); } -#ifndef NDEBUG /// Return "true" if there is a block rewrite that matches the specified /// rewrite type and block among the given rewrites. template @@ -734,7 +734,7 @@ static bool hasRewrite(R &&rewrites, Block *block) { return rewriteTy && rewriteTy->getBlock() == block; }); } -#endif // NDEBUG +#endif // MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS //===----------------------------------------------------------------------===// // ConversionPatternRewriterImpl @@ -1292,9 +1292,12 @@ Block *ConversionPatternRewriterImpl::applySignatureConversion( ConversionPatternRewriter &rewriter, Block *block, const TypeConverter *converter, TypeConverter::SignatureConversion &signatureConversion) { +#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS // A block cannot be converted multiple times. - assert(!hasRewrite(rewrites, block) && - "block was already converted"); + if (hasRewrite(rewrites, block)) + llvm::report_fatal_error("block was already converted"); +#endif // MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS + OpBuilder::InsertionGuard g(rewriter); // If no arguments are being changed or added, there is nothing to do. @@ -2236,9 +2239,9 @@ OperationLegalizer::legalizePatternResult(Operation *op, const Pattern &pattern, ConversionPatternRewriter &rewriter, RewriterState &curState) { auto &impl = rewriter.getImpl(); - -#ifndef NDEBUG assert(impl.pendingRootUpdates.empty() && "dangling root updates"); + +#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS // Check that the root was either replaced or updated in place. auto newRewrites = llvm::drop_begin(impl.rewrites, curState.numRewrites); auto replacedRoot = [&] { @@ -2247,9 +2250,9 @@ OperationLegalizer::legalizePatternResult(Operation *op, const Pattern &pattern, auto updatedRootInPlace = [&] { return hasRewrite(newRewrites, op); }; - assert((replacedRoot() || updatedRootInPlace()) && - "expected pattern to replace the root operation"); -#endif // NDEBUG + if (!replacedRoot() && !updatedRootInPlace()) + llvm::report_fatal_error("expected pattern to replace the root operation"); +#endif // MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS // Legalize each of the actions registered during application. RewriterState newState = impl.getCurrentState(); -- cgit v1.2.3 From ff939b06a5ef57ac926c53e9f85b955b8bd855aa Mon Sep 17 00:00:00 2001 From: Jie Fu Date: Fri, 13 Dec 2024 18:29:06 +0800 Subject: [mlir] Fix the header guard (NFC) /llvm-project/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h:9:9: error: 'MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_' is used as a header guard here, followed by #define of a different macro [-Werror,-Wheader-guard] ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /llvm-project/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h:10:9: note: 'MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBITIONUTILS_H_' is defined here; did you mean 'MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_'? ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_ 1 error generated. --- mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h b/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h index ff8840a76977..e6fbc5900206 100644 --- a/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h +++ b/mlir/include/mlir/Dialect/GPU/Utils/DistributionUtils.h @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #ifndef MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_ -#define MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBITIONUTILS_H_ +#define MLIR_DIALECT_GPU_TRANSFORMS_DISTRIBUTIONUTILS_H_ #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arith/IR/Arith.h" -- cgit v1.2.3 From 217e0f39710dec3348c996ecf98a76fd08b69853 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Fri, 13 Dec 2024 10:36:30 +0000 Subject: [SCEV] Add initial pattern matching for SCEV constants. (NFC) (#119389) Add initial pattern matching for SCEV constants. Follow-up patches will add additional matchers for various SCEV expressions. This patch only converts a few instances to use the new matchers to make sure everything builds as expected for now. PR: https://github.com/llvm/llvm-project/pull/119389 --- .../llvm/Analysis/ScalarEvolutionPatternMatch.h | 58 ++++++++++++++++++++++ llvm/lib/Analysis/ScalarEvolution.cpp | 38 +++++--------- 2 files changed, 70 insertions(+), 26 deletions(-) create mode 100644 llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h b/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h new file mode 100644 index 000000000000..21d2ef3c867d --- /dev/null +++ b/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file provides a simple and efficient mechanism for performing general +// tree-based pattern matches on SCEVs, based on LLVM's IR pattern matchers. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ANALYSIS_SCALAREVOLUTIONPATTERNMATCH_H +#define LLVM_ANALYSIS_SCALAREVOLUTIONPATTERNMATCH_H + +#include "llvm/Analysis/ScalarEvolutionExpressions.h" + +namespace llvm { +namespace SCEVPatternMatch { + +template +bool match(const SCEV *S, const Pattern &P) { + return P.match(S); +} + +template struct cst_pred_ty : public Predicate { + bool match(const SCEV *S) { + assert((isa(S) || !S->getType()->isVectorTy()) && + "no vector types expected from SCEVs"); + auto *C = dyn_cast(S); + return C && this->isValue(C->getAPInt()); + } +}; + +struct is_zero { + bool isValue(const APInt &C) { return C.isZero(); } +}; +/// Match an integer 0. +inline cst_pred_ty m_scev_Zero() { return cst_pred_ty(); } + +struct is_one { + bool isValue(const APInt &C) { return C.isOne(); } +}; +/// Match an integer 1. +inline cst_pred_ty m_scev_One() { return cst_pred_ty(); } + +struct is_all_ones { + bool isValue(const APInt &C) { return C.isAllOnes(); } +}; +/// Match an integer with all bits set. +inline cst_pred_ty m_scev_AllOnes() { + return cst_pred_ty(); +} + +} // namespace SCEVPatternMatch +} // namespace llvm + +#endif diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index cad10486cbf3..e18133971f5b 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -79,6 +79,7 @@ #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/MemoryBuiltins.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" +#include "llvm/Analysis/ScalarEvolutionPatternMatch.h" #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/Config/llvm-config.h" @@ -133,6 +134,7 @@ using namespace llvm; using namespace PatternMatch; +using namespace SCEVPatternMatch; #define DEBUG_TYPE "scalar-evolution" @@ -443,23 +445,11 @@ ArrayRef SCEV::operands() const { llvm_unreachable("Unknown SCEV kind!"); } -bool SCEV::isZero() const { - if (const SCEVConstant *SC = dyn_cast(this)) - return SC->getValue()->isZero(); - return false; -} +bool SCEV::isZero() const { return match(this, m_scev_Zero()); } -bool SCEV::isOne() const { - if (const SCEVConstant *SC = dyn_cast(this)) - return SC->getValue()->isOne(); - return false; -} +bool SCEV::isOne() const { return match(this, m_scev_One()); } -bool SCEV::isAllOnesValue() const { - if (const SCEVConstant *SC = dyn_cast(this)) - return SC->getValue()->isMinusOne(); - return false; -} +bool SCEV::isAllOnesValue() const { return match(this, m_scev_AllOnes()); } bool SCEV::isNonConstantNegative() const { const SCEVMulExpr *Mul = dyn_cast(this); @@ -3423,9 +3413,8 @@ const SCEV *ScalarEvolution::getUDivExpr(const SCEV *LHS, return S; // 0 udiv Y == 0 - if (const SCEVConstant *LHSC = dyn_cast(LHS)) - if (LHSC->getValue()->isZero()) - return LHS; + if (match(LHS, m_scev_Zero())) + return LHS; if (const SCEVConstant *RHSC = dyn_cast(RHS)) { if (RHSC->getValue()->isOne()) @@ -10593,7 +10582,6 @@ ScalarEvolution::ExitLimit ScalarEvolution::howFarToZero(const SCEV *V, // Get the initial value for the loop. const SCEV *Start = getSCEVAtScope(AddRec->getStart(), L->getParentLoop()); const SCEV *Step = getSCEVAtScope(AddRec->getOperand(1), L->getParentLoop()); - const SCEVConstant *StepC = dyn_cast(Step); if (!isLoopInvariant(Step, L)) return getCouldNotCompute(); @@ -10615,8 +10603,8 @@ ScalarEvolution::ExitLimit ScalarEvolution::howFarToZero(const SCEV *V, // Handle unitary steps, which cannot wraparound. // 1*N = -Start; -1*N = Start (mod 2^BW), so: // N = Distance (as unsigned) - if (StepC && - (StepC->getValue()->isOne() || StepC->getValue()->isMinusOne())) { + + if (match(Step, m_CombineOr(m_scev_One(), m_scev_AllOnes()))) { APInt MaxBECount = getUnsignedRangeMax(applyLoopGuards(Distance, Guards)); MaxBECount = APIntOps::umin(MaxBECount, getUnsignedRangeMax(Distance)); @@ -10668,6 +10656,7 @@ ScalarEvolution::ExitLimit ScalarEvolution::howFarToZero(const SCEV *V, } // Solve the general equation. + const SCEVConstant *StepC = dyn_cast(Step); if (!StepC || StepC->getValue()->isZero()) return getCouldNotCompute(); const SCEV *E = SolveLinEquationWithOverflow( @@ -15510,9 +15499,7 @@ void ScalarEvolution::LoopGuards::collectFromBlock( // If we have LHS == 0, check if LHS is computing a property of some unknown // SCEV %v which we can rewrite %v to express explicitly. - const SCEVConstant *RHSC = dyn_cast(RHS); - if (Predicate == CmpInst::ICMP_EQ && RHSC && - RHSC->getValue()->isNullValue()) { + if (Predicate == CmpInst::ICMP_EQ && match(RHS, m_scev_Zero())) { // If LHS is A % B, i.e. A % B == 0, rewrite A to (A /u B) * B to // explicitly express that. const SCEV *URemLHS = nullptr; @@ -15693,8 +15680,7 @@ void ScalarEvolution::LoopGuards::collectFromBlock( To = RHS; break; case CmpInst::ICMP_NE: - if (isa(RHS) && - cast(RHS)->getValue()->isNullValue()) { + if (match(RHS, m_scev_Zero())) { const SCEV *OneAlignedUp = DividesBy ? GetNextSCEVDividesByDivisor(One, DividesBy) : One; To = SE.getUMaxExpr(FromRewritten, OneAlignedUp); -- cgit v1.2.3 From 94a77ebe240eb7dff7c5d645fc7f60cce049783f Mon Sep 17 00:00:00 2001 From: David Green Date: Fri, 13 Dec 2024 11:02:55 +0000 Subject: [AArch64][GlobalISel] Guard against no operands in matchHoistLogicOpWithSameOpcodeHands In case both LeftHandInst and RightHandInst are IMPLICIT_DEF with no input operands, this patch protects against the post-legalizer-combiner matchHoistLogicOpWithSameOpcodeHands with no operands. The prelegalizercombiner-hoist-same-hands.mir test was cleaned up a little in the process, and has a post-legalizer run line added so that the implicit_def do not get folded awwy. --- llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp | 4 +- .../prelegalizercombiner-hoist-same-hands.mir | 521 ++++++++++++--------- 2 files changed, 293 insertions(+), 232 deletions(-) diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp index a27379954465..b46d4baf72a2 100644 --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp @@ -3095,7 +3095,9 @@ bool CombinerHelper::matchHoistLogicOpWithSameOpcodeHands( unsigned HandOpcode = LeftHandInst->getOpcode(); if (HandOpcode != RightHandInst->getOpcode()) return false; - if (!LeftHandInst->getOperand(1).isReg() || + if (LeftHandInst->getNumOperands() < 2 || + !LeftHandInst->getOperand(1).isReg() || + RightHandInst->getNumOperands() < 2 || !RightHandInst->getOperand(1).isReg()) return false; diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-hoist-same-hands.mir b/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-hoist-same-hands.mir index 7f2ae6ee2480..1b85cec49226 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-hoist-same-hands.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-hoist-same-hands.mir @@ -1,23 +1,24 @@ # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py -# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s +# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-PRE +# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POST -... --- name: or_combine_sext +# or (sext X), (sext Y) --> sext (or X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; or (sext X), (sext Y) --> sext (or X, Y) - ; ; CHECK-LABEL: name: or_combine_sext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_SEXT [[OR]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_SEXT [[OR]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_SEXT %x(s32) @@ -29,20 +30,21 @@ body: | ... --- name: or_combine_zext +# or (zext X), (zext Y) --> zext (or X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; or (zext X), (zext Y) --> zext (or X, Y) - ; ; CHECK-LABEL: name: or_combine_zext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_ZEXT [[OR]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ZEXT [[OR]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_ZEXT %x(s32) @@ -54,20 +56,21 @@ body: | ... --- name: or_combine_anyext +# or (anyext X), (anyext Y) --> anyext (or X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; or (anyext X), (anyext Y) --> anyext (or X, Y) - ; ; CHECK-LABEL: name: or_combine_anyext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_ANYEXT [[OR]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ANYEXT [[OR]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_ANYEXT %x(s32) @@ -79,20 +82,21 @@ body: | ... --- name: and_combine_sext +# and (sext X), (sext Y) --> sext (and X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; and (sext X), (sext Y) --> sext (and X, Y) - ; ; CHECK-LABEL: name: and_combine_sext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_SEXT [[AND]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_SEXT [[AND]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_SEXT %x(s32) @@ -104,20 +108,21 @@ body: | ... --- name: and_combine_zext +# and (zext X), (zext Y) --> zext (and X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; and (zext X), (zext Y) --> zext (and X, Y) - ; ; CHECK-LABEL: name: and_combine_zext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_ZEXT [[AND]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ZEXT [[AND]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_ZEXT %x(s32) @@ -129,20 +134,21 @@ body: | ... --- name: and_combine_anyext +# and (anyext X), (anyext Y) --> anyext (and X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; and (anyext X), (anyext Y) --> anyext (and X, Y) - ; ; CHECK-LABEL: name: and_combine_anyext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_ANYEXT [[AND]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ANYEXT [[AND]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_ANYEXT %x(s32) @@ -154,20 +160,21 @@ body: | ... --- name: xor_combine_sext +# xor (sext X), (sext Y) --> sext (xor X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; xor (sext X), (sext Y) --> sext (xor X, Y) - ; ; CHECK-LABEL: name: xor_combine_sext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[XOR:%[0-9]+]]:_(s32) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_SEXT [[XOR]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_SEXT [[XOR]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_SEXT %x(s32) @@ -179,20 +186,21 @@ body: | ... --- name: xor_combine_zext +# xor (zext X), (zext Y) --> zext (xor X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; xor (zext X), (zext Y) --> zext (xor X, Y) - ; ; CHECK-LABEL: name: xor_combine_zext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[XOR:%[0-9]+]]:_(s32) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_ZEXT [[XOR]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ZEXT [[XOR]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_ZEXT %x(s32) @@ -204,20 +212,21 @@ body: | ... --- name: xor_combine_anyext +# xor (anyext X), (anyext Y) --> anyext (xor X, Y) tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; xor (anyext X), (anyext Y) --> anyext (xor X, Y) - ; ; CHECK-LABEL: name: xor_combine_anyext ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: [[XOR:%[0-9]+]]:_(s32) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_ANYEXT [[XOR]](s32) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ANYEXT [[XOR]](s32) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_ANYEXT %x(s32) @@ -229,22 +238,23 @@ body: | ... --- name: dont_combine_different_types +# When %x and %y don't have the same type, don't perform the combine. tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; When %x and %y don't have the same type, don't perform the combine. - ; ; CHECK-LABEL: name: dont_combine_different_types ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %hand1:_(s32) = COPY $w1 - ; CHECK: %y:_(s16) = G_TRUNC %hand1(s32) - ; CHECK: %hand2:_(s64) = G_SEXT %x(s32) - ; CHECK: %logic_op:_(s64) = G_SEXT %y(s16) - ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR %hand2, %logic_op - ; CHECK: $x0 = COPY [[OR]](s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %hand1:_(s32) = COPY $w1 + ; CHECK-NEXT: %y:_(s16) = G_TRUNC %hand1(s32) + ; CHECK-NEXT: %hand2:_(s64) = G_SEXT %x(s32) + ; CHECK-NEXT: %logic_op:_(s64) = G_SEXT %y(s16) + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR %hand2, %logic_op + ; CHECK-NEXT: $x0 = COPY [[OR]](s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %hand1:_(s32) = COPY $w1 %y:_(s16) = G_TRUNC %hand1(s32) @@ -257,22 +267,35 @@ body: | ... --- name: illegal_ty +# Pre-legalization, it's okay to produce illegal types. tracksRegLiveness: true legalized: true body: | bb.0: liveins: $w0, $w1 - ; Pre-legalization, it's okay to produce illegal types. + ; CHECK-PRE-LABEL: name: illegal_ty + ; CHECK-PRE: liveins: $w0, $w1 + ; CHECK-PRE-NEXT: {{ $}} + ; CHECK-PRE-NEXT: %x_wide:_(s32) = COPY $w0 + ; CHECK-PRE-NEXT: %y_wide:_(s32) = COPY $w1 + ; CHECK-PRE-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR %x_wide, %y_wide + ; CHECK-PRE-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[OR]](s32) + ; CHECK-PRE-NEXT: %logic_op:_(s64) = G_SEXT [[TRUNC]](s1) + ; CHECK-PRE-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-PRE-NEXT: RET_ReallyLR implicit $x0 ; - ; CHECK-LABEL: name: illegal_ty - ; CHECK: liveins: $w0, $w1 - ; CHECK: %x_wide:_(s32) = COPY $w0 - ; CHECK: %y_wide:_(s32) = COPY $w1 - ; CHECK: %8:_(s32) = G_OR %x_wide, %y_wide - ; CHECK: %7:_(s1) = G_TRUNC %8(s32) - ; CHECK: %logic_op:_(s64) = G_SEXT %7(s1) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-POST-LABEL: name: illegal_ty + ; CHECK-POST: liveins: $w0, $w1 + ; CHECK-POST-NEXT: {{ $}} + ; CHECK-POST-NEXT: %x_wide:_(s32) = COPY $w0 + ; CHECK-POST-NEXT: %y_wide:_(s32) = COPY $w1 + ; CHECK-POST-NEXT: %x:_(s1) = G_TRUNC %x_wide(s32) + ; CHECK-POST-NEXT: %y:_(s1) = G_TRUNC %y_wide(s32) + ; CHECK-POST-NEXT: %hand1:_(s64) = G_SEXT %x(s1) + ; CHECK-POST-NEXT: %hand2:_(s64) = G_SEXT %y(s1) + ; CHECK-POST-NEXT: %logic_op:_(s64) = G_OR %hand1, %hand2 + ; CHECK-POST-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-POST-NEXT: RET_ReallyLR implicit $x0 %x_wide:_(s32) = COPY $w0 %y_wide:_(s32) = COPY $w1 %x:_(s1) = G_TRUNC %x_wide @@ -286,21 +309,22 @@ body: | ... --- name: or_combine_and +# or (and x, z), (and y, z) --> and (or x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; or (and x, z), (and y, z) --> and (or x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: or_combine_and ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_AND [[OR]], %z - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_AND [[OR]], %z + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -313,21 +337,22 @@ body: | ... --- name: or_combine_ashr +# or (ashr x, z), (ashr y, z) --> ashr (or x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; or (ashr x, z), (ashr y, z) --> ashr (or x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: or_combine_ashr ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_ASHR [[OR]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ASHR [[OR]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -340,21 +365,22 @@ body: | ... --- name: or_combine_lshr +# or (lshr x, z), (lshr y, z) --> lshr (or x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; or (lshr x, z), (lshr y, z) --> lshr (or x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: or_combine_lshr ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_LSHR [[OR]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_LSHR [[OR]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -367,21 +393,22 @@ body: | ... --- name: or_combine_shl +# or (shl x, z), (shl y, z) --> shl (or x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; or (shl x, z), (shl y, z) --> shl (or x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: or_combine_shl ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y - ; CHECK: %logic_op:_(s64) = G_SHL [[OR]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_SHL [[OR]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -394,21 +421,22 @@ body: | ... --- name: xor_combine_and +# xor (and x, z), (and y, z) --> and (xor x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; xor (and x, z), (and y, z) --> and (xor x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: xor_combine_and ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_AND [[XOR]], %z - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_AND [[XOR]], %z + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -421,21 +449,22 @@ body: | ... --- name: xor_combine_ashr +# xor (ashr x, z), (ashr y, z) --> ashr (xor x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; xor (ashr x, z), (ashr y, z) --> ashr (xor x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: xor_combine_ashr ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_ASHR [[XOR]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ASHR [[XOR]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -448,21 +477,22 @@ body: | ... --- name: xor_combine_lshr +# xor (lshr x, z), (lshr y, z) --> lshr (xor x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; xor (lshr x, z), (lshr y, z) --> lshr (xor x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: xor_combine_lshr ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_LSHR [[XOR]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_LSHR [[XOR]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -475,21 +505,22 @@ body: | ... --- name: xor_combine_shl +# xor (shl x, z), (shl y, z) --> shl (xor x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; xor (shl x, z), (shl y, z) --> shl (xor x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: xor_combine_shl ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y - ; CHECK: %logic_op:_(s64) = G_SHL [[XOR]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_SHL [[XOR]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -502,21 +533,22 @@ body: | ... --- name: and_combine_and +# and (and x, z), (and y, z) --> and (and x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; and (and x, z), (and y, z) --> and (and x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: and_combine_and ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_AND [[AND]], %z - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_AND [[AND]], %z + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -529,21 +561,22 @@ body: | ... --- name: and_combine_ashr +# and (ashr x, z), (ashr y, z) --> ashr (and x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; and (ashr x, z), (ashr y, z) --> ashr (and x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: and_combine_ashr ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_ASHR [[AND]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_ASHR [[AND]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -556,21 +589,22 @@ body: | ... --- name: and_combine_lshr +# and (lshr x, z), (lshr y, z) --> lshr (and x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; and (lshr x, z), (lshr y, z) --> lshr (and x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: and_combine_lshr ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_LSHR [[AND]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_LSHR [[AND]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -583,21 +617,22 @@ body: | ... --- name: and_combine_shl +# and (shl x, z), (shl y, z) --> shl (and x, y), z tracksRegLiveness: true +legalized: true body: | bb.0: - ; and (shl x, z), (shl y, z) --> shl (and x, y), z - ; liveins: $x0, $x1, $x2 ; CHECK-LABEL: name: and_combine_shl ; CHECK: liveins: $x0, $x1, $x2 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z:_(s64) = COPY $x2 - ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y - ; CHECK: %logic_op:_(s64) = G_SHL [[AND]], %z(s64) - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z:_(s64) = COPY $x2 + ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %x, %y + ; CHECK-NEXT: %logic_op:_(s64) = G_SHL [[AND]], %z(s64) + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z:_(s64) = COPY $x2 @@ -610,23 +645,24 @@ body: | ... --- name: dont_combine_different_defs_on_binop +# z1 != z2, so don't combine. tracksRegLiveness: true +legalized: true body: | bb.0: - ; z1 != z2, so don't combine. - ; liveins: $x0, $x1, $x2, $x3 ; CHECK-LABEL: name: dont_combine_different_defs_on_binop ; CHECK: liveins: $x0, $x1, $x2, $x3 - ; CHECK: %x:_(s64) = COPY $x0 - ; CHECK: %y:_(s64) = COPY $x1 - ; CHECK: %z1:_(s64) = COPY $x2 - ; CHECK: %z2:_(s64) = COPY $x3 - ; CHECK: %hand1:_(s64) = G_AND %x, %z1 - ; CHECK: %hand2:_(s64) = G_AND %y, %z2 - ; CHECK: %logic_op:_(s64) = G_OR %hand1, %hand2 - ; CHECK: $x0 = COPY %logic_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s64) = COPY $x0 + ; CHECK-NEXT: %y:_(s64) = COPY $x1 + ; CHECK-NEXT: %z1:_(s64) = COPY $x2 + ; CHECK-NEXT: %z2:_(s64) = COPY $x3 + ; CHECK-NEXT: %hand1:_(s64) = G_AND %x, %z1 + ; CHECK-NEXT: %hand2:_(s64) = G_AND %y, %z2 + ; CHECK-NEXT: %logic_op:_(s64) = G_OR %hand1, %hand2 + ; CHECK-NEXT: $x0 = COPY %logic_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s64) = COPY $x0 %y:_(s64) = COPY $x1 %z1:_(s64) = COPY $x2 @@ -640,22 +676,23 @@ body: | ... --- name: dont_combine_more_than_one_use +# The LHS register is used more than once. Don't combine. tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $w0, $w1 - ; The LHS register is used more than once. Don't combine. - ; ; CHECK-LABEL: name: dont_combine_more_than_one_use ; CHECK: liveins: $w0, $w1 - ; CHECK: %x:_(s32) = COPY $w0 - ; CHECK: %y:_(s32) = COPY $w1 - ; CHECK: %hand1:_(s64) = G_SEXT %x(s32) - ; CHECK: %hand2:_(s64) = G_SEXT %y(s32) - ; CHECK: %logic_op:_(s64) = G_OR %hand1, %hand2 - ; CHECK: %other_op:_(s64) = G_ADD %hand1, %logic_op - ; CHECK: $x0 = COPY %other_op(s64) - ; CHECK: RET_ReallyLR implicit $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(s32) = COPY $w0 + ; CHECK-NEXT: %y:_(s32) = COPY $w1 + ; CHECK-NEXT: %hand1:_(s64) = G_SEXT %x(s32) + ; CHECK-NEXT: %hand2:_(s64) = G_SEXT %y(s32) + ; CHECK-NEXT: %logic_op:_(s64) = G_OR %hand1, %hand2 + ; CHECK-NEXT: %other_op:_(s64) = G_ADD %hand1, %logic_op + ; CHECK-NEXT: $x0 = COPY %other_op(s64) + ; CHECK-NEXT: RET_ReallyLR implicit $x0 %x:_(s32) = COPY $w0 %y:_(s32) = COPY $w1 %hand1:_(s64) = G_SEXT %x(s32) @@ -668,20 +705,21 @@ body: | ... --- name: combine_vector +# Show that we can combine vector types. tracksRegLiveness: true +legalized: true body: | bb.0: liveins: $d0, $d1 - ; Show that we can combine vector types. - ; ; CHECK-LABEL: name: combine_vector ; CHECK: liveins: $d0, $d1 - ; CHECK: %x:_(<2 x s32>) = COPY $d0 - ; CHECK: %y:_(<2 x s32>) = COPY $d1 - ; CHECK: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR %x, %y - ; CHECK: %logic_op:_(<2 x s64>) = G_SEXT [[OR]](<2 x s32>) - ; CHECK: $q0 = COPY %logic_op(<2 x s64>) - ; CHECK: RET_ReallyLR implicit $q0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: %x:_(<2 x s32>) = COPY $d0 + ; CHECK-NEXT: %y:_(<2 x s32>) = COPY $d1 + ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR %x, %y + ; CHECK-NEXT: %logic_op:_(<2 x s64>) = G_SEXT [[OR]](<2 x s32>) + ; CHECK-NEXT: $q0 = COPY %logic_op(<2 x s64>) + ; CHECK-NEXT: RET_ReallyLR implicit $q0 %x:_(<2 x s32>) = COPY $d0 %y:_(<2 x s32>) = COPY $d1 %hand1:_(<2 x s64>) = G_SEXT %x(<2 x s32>) @@ -689,3 +727,24 @@ body: | %logic_op:_(<2 x s64>) = G_OR %hand1, %hand2 $q0 = COPY %logic_op(<2 x s64>) RET_ReallyLR implicit $q0 + +... +--- +name: combine_vector_implicitdef +tracksRegLiveness: true +legalized: true +body: | + bb.0: + liveins: $d0, $d1 + ; CHECK-LABEL: name: combine_vector_implicitdef + ; CHECK: liveins: $d0, $d1 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 + ; CHECK-NEXT: %logic_op:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) + ; CHECK-NEXT: $q0 = COPY %logic_op(<2 x s64>) + ; CHECK-NEXT: RET_ReallyLR implicit $q0 + %x:_(<2 x s64>) = G_IMPLICIT_DEF + %y:_(<2 x s64>) = G_IMPLICIT_DEF + %logic_op:_(<2 x s64>) = G_AND %x, %y + $q0 = COPY %logic_op(<2 x s64>) + RET_ReallyLR implicit $q0 -- cgit v1.2.3 From 8820de68ddf02fe3c73def49ec32bbeca54c2754 Mon Sep 17 00:00:00 2001 From: Pedro Lobo Date: Fri, 13 Dec 2024 11:07:02 +0000 Subject: [debug] Use poison instead of undef to set a killed dbg.assign address [NFC] (#119760) --- llvm/lib/IR/IntrinsicInst.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp index 002bab8e079e..ad174b1487a6 100644 --- a/llvm/lib/IR/IntrinsicInst.cpp +++ b/llvm/lib/IR/IntrinsicInst.cpp @@ -223,7 +223,7 @@ void DbgAssignIntrinsic::setAddress(Value *V) { void DbgAssignIntrinsic::setKillAddress() { if (isKillAddress()) return; - setAddress(UndefValue::get(getAddress()->getType())); + setAddress(PoisonValue::get(getAddress()->getType())); } bool DbgAssignIntrinsic::isKillAddress() const { -- cgit v1.2.3 From 30cbd09f4b8f7e94663631f0240d11bb754ea25b Mon Sep 17 00:00:00 2001 From: Timm Baeder Date: Fri, 13 Dec 2024 12:19:27 +0100 Subject: [clang][bytecode] Fix memcmp/bcmp failures on big-endian hosts (#119851) See the discussion in https://github.com/llvm/llvm-project/pull/119678#issuecomment-2539680746 and https://github.com/llvm/llvm-project/pull/119544#issuecomment-2539678561 --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 8 ++++++++ clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp | 5 ----- clang/lib/AST/ByteCode/InterpBuiltinBitCast.h | 5 +++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index 21baedf832ee..c1c43672176a 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -1943,10 +1943,18 @@ static bool interp__builtin_memcmp(InterpState &S, CodePtr OpPC, BitcastBuffer BufferA( Bits(S.getASTContext().getTypeSize(PtrA.getFieldDesc()->getType()))); readPointerToBuffer(S.getContext(), PtrA, BufferA, false); + // FIXME: The swapping here is UNDOING something we do when reading the + // data into the buffer. + if (S.getASTContext().getTargetInfo().isBigEndian()) + swapBytes(BufferA.Data.get(), BufferA.byteSize().getQuantity()); BitcastBuffer BufferB( Bits(S.getASTContext().getTypeSize(PtrB.getFieldDesc()->getType()))); readPointerToBuffer(S.getContext(), PtrB, BufferB, false); + // FIXME: The swapping here is UNDOING something we do when reading the + // data into the buffer. + if (S.getASTContext().getTargetInfo().isBigEndian()) + swapBytes(BufferB.Data.get(), BufferB.byteSize().getQuantity()); size_t MinBufferSize = std::min(BufferA.byteSize().getQuantity(), BufferB.byteSize().getQuantity()); diff --git a/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp b/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp index c87993b8739a..07f769437082 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltinBitCast.cpp @@ -73,11 +73,6 @@ using DataFunc = } \ } while (0) -static void swapBytes(std::byte *M, size_t N) { - for (size_t I = 0; I != (N / 2); ++I) - std::swap(M[I], M[N - 1 - I]); -} - /// We use this to recursively iterate over all fields and elements of a pointer /// and extract relevant data for a bitcast. static bool enumerateData(const Pointer &P, const Context &Ctx, Bits Offset, diff --git a/clang/lib/AST/ByteCode/InterpBuiltinBitCast.h b/clang/lib/AST/ByteCode/InterpBuiltinBitCast.h index 08c207c7415d..b45613b2f21e 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltinBitCast.h +++ b/clang/lib/AST/ByteCode/InterpBuiltinBitCast.h @@ -19,6 +19,11 @@ class InterpState; class CodePtr; class Context; +inline static void swapBytes(std::byte *M, size_t N) { + for (size_t I = 0; I != (N / 2); ++I) + std::swap(M[I], M[N - 1 - I]); +} + bool DoBitCast(InterpState &S, CodePtr OpPC, const Pointer &Ptr, std::byte *Buff, Bits BitWidth, Bits FullBitWidth, bool &HasIndeterminateBits); -- cgit v1.2.3 From 84b0f0145887bbfe49fd4dc85490b14108a72cee Mon Sep 17 00:00:00 2001 From: VScigolevs Date: Fri, 13 Dec 2024 13:24:31 +0200 Subject: [clang-cl] Don't add implicit NoBuiltinAttr to deleted or defaulted functions (#119719) In Clang `#pragma function` is implemented by adding an implicit NoBuiltin Attribute to all function definitions after the pragma. This (wrongly) includes also defaulted or deleted functions, which results in the error, shown in #116256. As this attribute has no effect on the deleted or defaulted functions, this commit fixes the previously mentioned issue by simply not adding the attribute in such cases. Fixes #116256 --- clang/lib/Sema/SemaAttr.cpp | 2 ++ .../msvc-pragma-function-no-builtin-attr.cpp | 32 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp index 479f47962a7c..44485e71d57a 100644 --- a/clang/lib/Sema/SemaAttr.cpp +++ b/clang/lib/Sema/SemaAttr.cpp @@ -1310,6 +1310,8 @@ void Sema::AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, } void Sema::AddImplicitMSFunctionNoBuiltinAttr(FunctionDecl *FD) { + if (FD->isDeleted() || FD->isDefaulted()) + return; SmallVector V(MSFunctionNoBuiltins.begin(), MSFunctionNoBuiltins.end()); if (!MSFunctionNoBuiltins.empty()) diff --git a/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp b/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp new file mode 100644 index 000000000000..cd2ac7d1edbe --- /dev/null +++ b/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp @@ -0,0 +1,32 @@ +// RUN: %clang_cl -fms-compatibility -Xclang -ast-dump -fsyntax-only %s | FileCheck %s + +extern "C" __inline float __cdecl fabsf( float _X); +// CHECK: FunctionDecl {{.*}} fabsf +#pragma function(fabsf) + __inline float __cdecl fabsf( float _X) +{ + return 0; +} +// CHECK: FunctionDecl {{.*}} fabsf +// CHECK: NoBuiltinAttr {{.*}} <> Implicit fabsf + +int bar() { + return 0; +} +// CHECK: FunctionDecl {{.*}} bar +// CHECK: NoBuiltinAttr {{.*}} <> Implicit fabsf + +struct A { + int foo() = delete; + // CHECK: CXXMethodDecl {{.*}} foo 'int ()' delete + // CHECK-NOT: NoBuiltinAttr + A() = default; + // CHECK: CXXConstructorDecl {{.*}} A 'void ()' default + // CHECK-NOT: NoBuiltinAttr +}; + +int main() { + return 0; +} +// CHECK: FunctionDecl {{.*}} main +// CHECK: NoBuiltinAttr {{.*}} <> Implicit fabsf -- cgit v1.2.3 From 8bf19ec444593b3076a446a8eeb5042bbf79dc65 Mon Sep 17 00:00:00 2001 From: macurtis-amd Date: Fri, 13 Dec 2024 05:27:00 -0600 Subject: [clang] Fix use of dangling ptr in CommandLineTest (#119798) If 'GeneratedArgsStorage' ever grows, contained strings may get copied and data pointers stored in 'GeneratedArgs' may become invalid, pointing to deallocated memory. --- clang/unittests/Frontend/CompilerInvocationTest.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/clang/unittests/Frontend/CompilerInvocationTest.cpp b/clang/unittests/Frontend/CompilerInvocationTest.cpp index 4ff6824f1e21..94ab9fe8451e 100644 --- a/clang/unittests/Frontend/CompilerInvocationTest.cpp +++ b/clang/unittests/Frontend/CompilerInvocationTest.cpp @@ -31,17 +31,19 @@ class CommandLineTest : public ::testing::Test { public: IntrusiveRefCntPtr Diags; SmallVector GeneratedArgs; - SmallVector GeneratedArgsStorage; + BumpPtrAllocator Alloc; + StringSaver StringPool; CompilerInvocation Invocation; const char *operator()(const Twine &Arg) { - return GeneratedArgsStorage.emplace_back(Arg.str()).c_str(); + return StringPool.save(Arg).data(); } CommandLineTest() : Diags(CompilerInstance::createDiagnostics( *llvm::vfs::getRealFileSystem(), new DiagnosticOptions(), - new TextDiagnosticBuffer())) {} + new TextDiagnosticBuffer())), + StringPool(Alloc) {} }; template -- cgit v1.2.3 From 716360367fbdabac2c374c19b8746f4de49a5599 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Fri, 13 Dec 2024 11:29:32 +0000 Subject: [Polly] Use const SCEV * explicitly in more places. (NFC) Use const SCEV * explicitly in more places to prepare for https://github.com/llvm/llvm-project/pull/91961. --- polly/lib/Analysis/ScopBuilder.cpp | 22 +++++++++++----------- polly/lib/Analysis/ScopDetection.cpp | 11 ++++++----- polly/lib/Analysis/ScopInfo.cpp | 14 +++++++------- polly/lib/Support/SCEVAffinator.cpp | 16 ++++++++-------- polly/lib/Support/SCEVValidator.cpp | 24 ++++++++++++------------ polly/lib/Support/ScopHelper.cpp | 4 ++-- polly/lib/Support/VirtualInstruction.cpp | 2 +- 7 files changed, 47 insertions(+), 46 deletions(-) diff --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp index c05fc1a347c2..82fa9e11550f 100644 --- a/polly/lib/Analysis/ScopBuilder.cpp +++ b/polly/lib/Analysis/ScopBuilder.cpp @@ -1567,7 +1567,7 @@ bool ScopBuilder::buildAccessMemIntrinsic(MemAccInst Inst, ScopStmt *Stmt) { return false; auto *L = LI.getLoopFor(Inst->getParent()); - auto *LengthVal = SE.getSCEVAtScope(MemIntr->getLength(), L); + const SCEV *LengthVal = SE.getSCEVAtScope(MemIntr->getLength(), L); assert(LengthVal); // Check if the length val is actually affine or if we overapproximate it @@ -1586,7 +1586,7 @@ bool ScopBuilder::buildAccessMemIntrinsic(MemAccInst Inst, ScopStmt *Stmt) { auto *DestPtrVal = MemIntr->getDest(); assert(DestPtrVal); - auto *DestAccFunc = SE.getSCEVAtScope(DestPtrVal, L); + const SCEV *DestAccFunc = SE.getSCEVAtScope(DestPtrVal, L); assert(DestAccFunc); // Ignore accesses to "NULL". // TODO: We could use this to optimize the region further, e.g., intersect @@ -1616,7 +1616,7 @@ bool ScopBuilder::buildAccessMemIntrinsic(MemAccInst Inst, ScopStmt *Stmt) { auto *SrcPtrVal = MemTrans->getSource(); assert(SrcPtrVal); - auto *SrcAccFunc = SE.getSCEVAtScope(SrcPtrVal, L); + const SCEV *SrcAccFunc = SE.getSCEVAtScope(SrcPtrVal, L); assert(SrcAccFunc); // Ignore accesses to "NULL". // TODO: See above TODO @@ -1643,7 +1643,7 @@ bool ScopBuilder::buildAccessCallInst(MemAccInst Inst, ScopStmt *Stmt) { if (CI->doesNotAccessMemory() || isIgnoredIntrinsic(CI) || isDebugCall(CI)) return true; - auto *AF = SE.getConstant(IntegerType::getInt64Ty(CI->getContext()), 0); + const SCEV *AF = SE.getConstant(IntegerType::getInt64Ty(CI->getContext()), 0); auto *CalledFunction = CI->getCalledFunction(); MemoryEffects ME = AA.getMemoryEffects(CalledFunction); if (ME.doesNotAccessMemory()) @@ -1658,7 +1658,7 @@ bool ScopBuilder::buildAccessCallInst(MemAccInst Inst, ScopStmt *Stmt) { if (!Arg->getType()->isPointerTy()) continue; - auto *ArgSCEV = SE.getSCEVAtScope(Arg, L); + const SCEV *ArgSCEV = SE.getSCEVAtScope(Arg, L); if (ArgSCEV->isZero()) continue; @@ -2169,7 +2169,7 @@ static bool isDivisible(const SCEV *Expr, unsigned Size, ScalarEvolution &SE) { // Only one factor needs to be divisible. if (auto *MulExpr = dyn_cast(Expr)) { - for (auto *FactorExpr : MulExpr->operands()) + for (const SCEV *FactorExpr : MulExpr->operands()) if (isDivisible(FactorExpr, Size, SE)) return true; return false; @@ -2178,15 +2178,15 @@ static bool isDivisible(const SCEV *Expr, unsigned Size, ScalarEvolution &SE) { // For other n-ary expressions (Add, AddRec, Max,...) all operands need // to be divisible. if (auto *NAryExpr = dyn_cast(Expr)) { - for (auto *OpExpr : NAryExpr->operands()) + for (const SCEV *OpExpr : NAryExpr->operands()) if (!isDivisible(OpExpr, Size, SE)) return false; return true; } - auto *SizeSCEV = SE.getConstant(Expr->getType(), Size); - auto *UDivSCEV = SE.getUDivExpr(Expr, SizeSCEV); - auto *MulSCEV = SE.getMulExpr(UDivSCEV, SizeSCEV); + const SCEV *SizeSCEV = SE.getConstant(Expr->getType(), Size); + const SCEV *UDivSCEV = SE.getUDivExpr(Expr, SizeSCEV); + const SCEV *MulSCEV = SE.getMulExpr(UDivSCEV, SizeSCEV); return MulSCEV == Expr; } @@ -3672,7 +3672,7 @@ void ScopBuilder::buildScop(Region &R, AssumptionCache &AC) { } // Create memory accesses for global reads since all arrays are now known. - auto *AF = SE.getConstant(IntegerType::getInt64Ty(SE.getContext()), 0); + const SCEV *AF = SE.getConstant(IntegerType::getInt64Ty(SE.getContext()), 0); for (auto GlobalReadPair : GlobalReads) { ScopStmt *GlobalReadStmt = GlobalReadPair.first; Instruction *GlobalRead = GlobalReadPair.second; diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp index 73c26578005c..7ad2e53b589a 100644 --- a/polly/lib/Analysis/ScopDetection.cpp +++ b/polly/lib/Analysis/ScopDetection.cpp @@ -520,7 +520,7 @@ bool ScopDetection::involvesMultiplePtrs(const SCEV *S0, const SCEV *S1, if (!V->getType()->isPointerTy()) continue; - auto *PtrSCEV = SE.getSCEVAtScope(V, Scope); + const SCEV *PtrSCEV = SE.getSCEVAtScope(V, Scope); if (isa(PtrSCEV)) continue; @@ -528,7 +528,7 @@ bool ScopDetection::involvesMultiplePtrs(const SCEV *S0, const SCEV *S1, if (!BasePtr) return true; - auto *BasePtrVal = BasePtr->getValue(); + Value *BasePtrVal = BasePtr->getValue(); if (PtrVals.insert(BasePtrVal).second) { for (auto *PtrVal : PtrVals) if (PtrVal != BasePtrVal && !AA.isNoAlias(PtrVal, BasePtrVal)) @@ -720,7 +720,8 @@ bool ScopDetection::isValidCallInst(CallInst &CI, // Bail if a pointer argument has a base address not known to // ScalarEvolution. Note that a zero pointer is acceptable. - auto *ArgSCEV = SE.getSCEVAtScope(Arg, LI.getLoopFor(CI.getParent())); + const SCEV *ArgSCEV = + SE.getSCEVAtScope(Arg, LI.getLoopFor(CI.getParent())); if (ArgSCEV->isZero()) continue; @@ -891,7 +892,7 @@ ScopDetection::getDelinearizationTerms(DetectionContext &Context, if (auto *AF2 = dyn_cast(Op)) { SmallVector Operands; - for (auto *MulOp : AF2->operands()) { + for (const SCEV *MulOp : AF2->operands()) { if (auto *Const = dyn_cast(MulOp)) Operands.push_back(Const); if (auto *Unknown = dyn_cast(MulOp)) { @@ -1366,7 +1367,7 @@ bool ScopDetection::isValidLoop(Loop *L, DetectionContext &Context) { ScopDetection::LoopStats ScopDetection::countBeneficialSubLoops(Loop *L, ScalarEvolution &SE, unsigned MinProfitableTrips) { - auto *TripCount = SE.getBackedgeTakenCount(L); + const SCEV *TripCount = SE.getBackedgeTakenCount(L); int NumLoops = 1; int MaxLoopDepth = 1; diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 56ffb990faf1..ab9330581eb5 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -215,7 +215,7 @@ static const ScopArrayInfo *identifyBasePtrOriginSAI(Scop *S, Value *BasePtr) { ScalarEvolution &SE = *S->getSE(); - auto *OriginBaseSCEV = + const SCEV *OriginBaseSCEV = SE.getPointerBase(SE.getSCEV(BasePtrLI->getPointerOperand())); if (!OriginBaseSCEV) return nullptr; @@ -713,11 +713,11 @@ void MemoryAccess::computeBoundsOnAccessRelation(unsigned ElementSize) { if (!Ptr || !SE->isSCEVable(Ptr->getType())) return; - auto *PtrSCEV = SE->getSCEV(Ptr); + const SCEV *PtrSCEV = SE->getSCEV(Ptr); if (isa(PtrSCEV)) return; - auto *BasePtrSCEV = SE->getPointerBase(PtrSCEV); + const SCEV *BasePtrSCEV = SE->getPointerBase(PtrSCEV); if (BasePtrSCEV && !isa(BasePtrSCEV)) PtrSCEV = SE->getMinusSCEV(PtrSCEV, BasePtrSCEV); @@ -1384,10 +1384,10 @@ public: } const SCEV *visitAddRecExpr(const SCEVAddRecExpr *E) { - auto *Start = visit(E->getStart()); - auto *AddRec = SE.getAddRecExpr(SE.getConstant(E->getType(), 0), - visit(E->getStepRecurrence(SE)), - E->getLoop(), SCEV::FlagAnyWrap); + const SCEV *Start = visit(E->getStart()); + const SCEV *AddRec = SE.getAddRecExpr(SE.getConstant(E->getType(), 0), + visit(E->getStepRecurrence(SE)), + E->getLoop(), SCEV::FlagAnyWrap); return SE.getAddExpr(Start, AddRec); } diff --git a/polly/lib/Support/SCEVAffinator.cpp b/polly/lib/Support/SCEVAffinator.cpp index d8463b238822..ce4467f082ba 100644 --- a/polly/lib/Support/SCEVAffinator.cpp +++ b/polly/lib/Support/SCEVAffinator.cpp @@ -281,7 +281,7 @@ PWACtx SCEVAffinator::visitTruncateExpr(const SCEVTruncateExpr *Expr) { // to fit in the new type size instead of introducing a modulo with a very // large constant. - auto *Op = Expr->getOperand(); + const SCEV *Op = Expr->getOperand(); auto OpPWAC = visit(Op); unsigned Width = TD.getTypeSizeInBits(Expr->getType()); @@ -354,7 +354,7 @@ PWACtx SCEVAffinator::visitZeroExtendExpr(const SCEVZeroExtendExpr *Expr) { // bit-width is bigger than MaxZextSmallBitWidth we will employ overflow // assumptions and assume the "former negative" piece will not exist. - auto *Op = Expr->getOperand(); + const SCEV *Op = Expr->getOperand(); auto OpPWAC = visit(Op); // If the width is to big we assume the negative part does not occur. @@ -483,8 +483,8 @@ PWACtx SCEVAffinator::visitUDivExpr(const SCEVUDivExpr *Expr) { // For the dividend we could choose from the different representation // schemes introduced for zero-extend operations but for now we will // simply use an assumption. - auto *Dividend = Expr->getLHS(); - auto *Divisor = Expr->getRHS(); + const SCEV *Dividend = Expr->getLHS(); + const SCEV *Divisor = Expr->getRHS(); assert(isa(Divisor) && "UDiv is no parameter but has a non-constant RHS."); @@ -518,13 +518,13 @@ PWACtx SCEVAffinator::visitSDivInstruction(Instruction *SDiv) { auto *Scope = getScope(); auto *Divisor = SDiv->getOperand(1); - auto *DivisorSCEV = SE.getSCEVAtScope(Divisor, Scope); + const SCEV *DivisorSCEV = SE.getSCEVAtScope(Divisor, Scope); auto DivisorPWAC = visit(DivisorSCEV); assert(isa(DivisorSCEV) && "SDiv is no parameter but has a non-constant RHS."); auto *Dividend = SDiv->getOperand(0); - auto *DividendSCEV = SE.getSCEVAtScope(Dividend, Scope); + const SCEV *DividendSCEV = SE.getSCEVAtScope(Dividend, Scope); auto DividendPWAC = visit(DividendSCEV); DividendPWAC = combine(DividendPWAC, DivisorPWAC, isl_pw_aff_tdiv_q); return DividendPWAC; @@ -535,13 +535,13 @@ PWACtx SCEVAffinator::visitSRemInstruction(Instruction *SRem) { auto *Scope = getScope(); auto *Divisor = SRem->getOperand(1); - auto *DivisorSCEV = SE.getSCEVAtScope(Divisor, Scope); + const SCEV *DivisorSCEV = SE.getSCEVAtScope(Divisor, Scope); auto DivisorPWAC = visit(DivisorSCEV); assert(isa(Divisor) && "SRem is no parameter but has a non-constant RHS."); auto *Dividend = SRem->getOperand(0); - auto *DividendSCEV = SE.getSCEVAtScope(Dividend, Scope); + const SCEV *DividendSCEV = SE.getSCEVAtScope(Dividend, Scope); auto DividendPWAC = visit(DividendSCEV); DividendPWAC = combine(DividendPWAC, DivisorPWAC, isl_pw_aff_tdiv_r); return DividendPWAC; diff --git a/polly/lib/Support/SCEVValidator.cpp b/polly/lib/Support/SCEVValidator.cpp index 5bb82624ed78..599d7f9d6080 100644 --- a/polly/lib/Support/SCEVValidator.cpp +++ b/polly/lib/Support/SCEVValidator.cpp @@ -403,8 +403,8 @@ public: if (!PollyAllowUnsignedOperations) return ValidatorResult(SCEVType::INVALID); - auto *Dividend = Expr->getLHS(); - auto *Divisor = Expr->getRHS(); + const SCEV *Dividend = Expr->getLHS(); + const SCEV *Divisor = Expr->getRHS(); return visitDivision(Dividend, Divisor, Expr); } @@ -412,8 +412,8 @@ public: assert(SDiv->getOpcode() == Instruction::SDiv && "Assumed SDiv instruction!"); - auto *Dividend = SE.getSCEV(SDiv->getOperand(0)); - auto *Divisor = SE.getSCEV(SDiv->getOperand(1)); + const SCEV *Dividend = SE.getSCEV(SDiv->getOperand(0)); + const SCEV *Divisor = SE.getSCEV(SDiv->getOperand(1)); return visitDivision(Dividend, Divisor, Expr, SDiv); } @@ -427,7 +427,7 @@ public: return visitGenericInst(SRem, S); auto *Dividend = SRem->getOperand(0); - auto *DividendSCEV = SE.getSCEV(Dividend); + const SCEV *DividendSCEV = SE.getSCEV(Dividend); return visit(DividendSCEV); } @@ -566,11 +566,11 @@ public: Inst->getOpcode() != Instruction::SDiv)) return false; - auto *Dividend = SE.getSCEV(Inst->getOperand(1)); + const SCEV *Dividend = SE.getSCEV(Inst->getOperand(1)); if (!isa(Dividend)) return false; - auto *Divisor = SE.getSCEV(Inst->getOperand(0)); + const SCEV *Divisor = SE.getSCEV(Inst->getOperand(0)); SCEVFindValues FindValues(SE, Values); SCEVTraversal ST(FindValues); ST.visitAll(Dividend); @@ -623,7 +623,7 @@ bool polly::isAffineExpr(const Region *R, llvm::Loop *Scope, const SCEV *Expr, static bool isAffineExpr(Value *V, const Region *R, Loop *Scope, ScalarEvolution &SE, ParameterSetTy &Params) { - auto *E = SE.getSCEV(V); + const SCEV *E = SE.getSCEV(V); if (isa(E)) return false; @@ -684,10 +684,10 @@ polly::extractConstantFactor(const SCEV *S, ScalarEvolution &SE) { auto *AddRec = dyn_cast(S); if (AddRec) { - auto *StartExpr = AddRec->getStart(); + const SCEV *StartExpr = AddRec->getStart(); if (StartExpr->isZero()) { auto StepPair = extractConstantFactor(AddRec->getStepRecurrence(SE), SE); - auto *LeftOverAddRec = + const SCEV *LeftOverAddRec = SE.getAddRecExpr(StartExpr, StepPair.second, AddRec->getLoop(), AddRec->getNoWrapFlags()); return std::make_pair(StepPair.first, LeftOverAddRec); @@ -717,7 +717,7 @@ polly::extractConstantFactor(const SCEV *S, ScalarEvolution &SE) { return std::make_pair(ConstPart, S); } - auto *NewAdd = SE.getAddExpr(LeftOvers, Add->getNoWrapFlags()); + const SCEV *NewAdd = SE.getAddExpr(LeftOvers, Add->getNoWrapFlags()); return std::make_pair(Factor, NewAdd); } @@ -726,7 +726,7 @@ polly::extractConstantFactor(const SCEV *S, ScalarEvolution &SE) { return std::make_pair(ConstPart, S); SmallVector LeftOvers; - for (auto *Op : Mul->operands()) + for (const SCEV *Op : Mul->operands()) if (isa(Op)) ConstPart = cast(SE.getMulExpr(ConstPart, Op)); else diff --git a/polly/lib/Support/ScopHelper.cpp b/polly/lib/Support/ScopHelper.cpp index 754bf50e2911..6d50e297ef71 100644 --- a/polly/lib/Support/ScopHelper.cpp +++ b/polly/lib/Support/ScopHelper.cpp @@ -315,7 +315,7 @@ private: auto *InstClone = Inst->clone(); for (auto &Op : Inst->operands()) { assert(GenSE.isSCEVable(Op->getType())); - auto *OpSCEV = GenSE.getSCEV(Op); + const SCEV *OpSCEV = GenSE.getSCEV(Op); auto *OpClone = expandCodeFor(OpSCEV, Op->getType(), IP); InstClone->replaceUsesOfWith(Op, OpClone); } @@ -330,7 +330,7 @@ private: // If a value mapping was given try if the underlying value is remapped. Value *NewVal = VMap ? VMap->lookup(E->getValue()) : nullptr; if (NewVal) { - auto *NewE = GenSE.getSCEV(NewVal); + const SCEV *NewE = GenSE.getSCEV(NewVal); // While the mapped value might be different the SCEV representation might // not be. To this end we will check before we go into recursion here. diff --git a/polly/lib/Support/VirtualInstruction.cpp b/polly/lib/Support/VirtualInstruction.cpp index e570d8d54649..96197aaececa 100644 --- a/polly/lib/Support/VirtualInstruction.cpp +++ b/polly/lib/Support/VirtualInstruction.cpp @@ -65,7 +65,7 @@ VirtualUse VirtualUse::create(Scop *S, ScopStmt *UserStmt, Loop *UserScope, // We assume synthesizable which practically should have the same effect. auto *SE = S->getSE(); if (SE->isSCEVable(Val->getType())) { - auto *ScevExpr = SE->getSCEVAtScope(Val, UserScope); + const SCEV *ScevExpr = SE->getSCEVAtScope(Val, UserScope); if (!UserStmt || canSynthesize(Val, *UserStmt->getParent(), SE, UserScope)) return VirtualUse(UserStmt, Val, Synthesizable, ScevExpr, nullptr); } -- cgit v1.2.3 From a30e50fcb3119cc1f84f0398d229a929f296188d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 13 Dec 2024 12:58:59 +0100 Subject: [BasicAA] Do not decompose past casts with different index width (#119365) BasicAA currently tries to support addrspacecasts that change the index width by performing the decomposition in the maximum of all index widths and then trying to fix this up with in-place sign extends to get correct overflow behavior if the actual index width is smaller. However, even in the case where we don't mix different index widths and just have an index width that is smaller than the maximum, the behavior is incorrect (see test), because we only perform the index width adjustment during decomposition and not any of the later logic -- and we don't do anything at all for variable offsets. I'm sure that the case where we actually mix different index widths is even more broken than that. Fix this by not allowing decomposition through index width changes. If the pointers have different index widths, fall back to a base object comparison, ignoring the offsets. --- .../CodeGen/SystemZ/zos-mixed-ptr-sizes-malloc.c | 2 +- llvm/lib/Analysis/BasicAliasAnalysis.cpp | 65 +++++++++------------- .../BasicAA/smaller-index-size-overflow.ll | 3 +- 3 files changed, 28 insertions(+), 42 deletions(-) diff --git a/clang/test/CodeGen/SystemZ/zos-mixed-ptr-sizes-malloc.c b/clang/test/CodeGen/SystemZ/zos-mixed-ptr-sizes-malloc.c index 1b05e8aa5052..c0ca3dab5125 100644 --- a/clang/test/CodeGen/SystemZ/zos-mixed-ptr-sizes-malloc.c +++ b/clang/test/CodeGen/SystemZ/zos-mixed-ptr-sizes-malloc.c @@ -4,7 +4,7 @@ void *__malloc31(size_t); int test_1() { // X64-LABEL: define {{.*}} i32 @test_1() - // X64: ret i32 135 + // X64: ret i32 %add20 int *__ptr32 a; int *b; int i; diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index dc54d566e55b..b2a3f3390e00 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -494,20 +494,6 @@ static LinearExpression GetLinearExpression( return Val; } -/// To ensure a pointer offset fits in an integer of size IndexSize -/// (in bits) when that size is smaller than the maximum index size. This is -/// an issue, for example, in particular for 32b pointers with negative indices -/// that rely on two's complement wrap-arounds for precise alias information -/// where the maximum index size is 64b. -static void adjustToIndexSize(APInt &Offset, unsigned IndexSize) { - assert(IndexSize <= Offset.getBitWidth() && "Invalid IndexSize!"); - unsigned ShiftBits = Offset.getBitWidth() - IndexSize; - if (ShiftBits != 0) { - Offset <<= ShiftBits; - Offset.ashrInPlace(ShiftBits); - } -} - namespace { // A linear transformation of a Value; this class represents // ZExt(SExt(Trunc(V, TruncBits), SExtBits), ZExtBits) * Scale. @@ -594,9 +580,9 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, SearchTimes++; const Instruction *CxtI = dyn_cast(V); - unsigned MaxIndexSize = DL.getMaxIndexSizeInBits(); + unsigned IndexSize = DL.getIndexTypeSizeInBits(V->getType()); DecomposedGEP Decomposed; - Decomposed.Offset = APInt(MaxIndexSize, 0); + Decomposed.Offset = APInt(IndexSize, 0); do { // See if this is a bitcast or GEP. const Operator *Op = dyn_cast(V); @@ -614,7 +600,14 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, if (Op->getOpcode() == Instruction::BitCast || Op->getOpcode() == Instruction::AddrSpaceCast) { - V = Op->getOperand(0); + Value *NewV = Op->getOperand(0); + // Don't look through casts between address spaces with differing index + // widths. + if (DL.getIndexTypeSizeInBits(NewV->getType()) != IndexSize) { + Decomposed.Base = V; + return Decomposed; + } + V = NewV; continue; } @@ -651,12 +644,8 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, assert(GEPOp->getSourceElementType()->isSized() && "GEP must be sized"); - unsigned AS = GEPOp->getPointerAddressSpace(); // Walk the indices of the GEP, accumulating them into BaseOff/VarIndices. gep_type_iterator GTI = gep_type_begin(GEPOp); - unsigned IndexSize = DL.getIndexSizeInBits(AS); - // Assume all GEP operands are constants until proven otherwise. - bool GepHasConstantOffset = true; for (User::const_op_iterator I = GEPOp->op_begin() + 1, E = GEPOp->op_end(); I != E; ++I, ++GTI) { const Value *Index = *I; @@ -684,7 +673,7 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, } Decomposed.Offset += AllocTypeSize.getFixedValue() * - CIdx->getValue().sextOrTrunc(MaxIndexSize); + CIdx->getValue().sextOrTrunc(IndexSize); continue; } @@ -694,8 +683,6 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, return Decomposed; } - GepHasConstantOffset = false; - // If the integer type is smaller than the index size, it is implicitly // sign extended or truncated to index size. bool NUSW = GEPOp->hasNoUnsignedSignedWrap(); @@ -710,8 +697,8 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, // Scale by the type size. unsigned TypeSize = AllocTypeSize.getFixedValue(); LE = LE.mul(APInt(IndexSize, TypeSize), NUW, NUSW); - Decomposed.Offset += LE.Offset.sext(MaxIndexSize); - APInt Scale = LE.Scale.sext(MaxIndexSize); + Decomposed.Offset += LE.Offset; + APInt Scale = LE.Scale; if (!LE.IsNUW) Decomposed.NWFlags = Decomposed.NWFlags.withoutNoUnsignedWrap(); @@ -731,10 +718,6 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, } } - // Make sure that we have a scale that makes sense for this target's - // index size. - adjustToIndexSize(Scale, IndexSize); - if (!!Scale) { VariableGEPIndex Entry = {LE.Val, Scale, CxtI, LE.IsNSW, /* IsNegated */ false}; @@ -742,10 +725,6 @@ BasicAAResult::DecomposeGEPExpression(const Value *V, const DataLayout &DL, } } - // Take care of wrap-arounds - if (GepHasConstantOffset) - adjustToIndexSize(Decomposed.Offset, IndexSize); - // Analyze the base pointer next. V = GEPOp->getOperand(0); } while (--MaxLookup); @@ -1084,6 +1063,14 @@ AliasResult BasicAAResult::aliasGEP( const GEPOperator *GEP1, LocationSize V1Size, const Value *V2, LocationSize V2Size, const Value *UnderlyingV1, const Value *UnderlyingV2, AAQueryInfo &AAQI) { + auto BaseObjectsAlias = [&]() { + AliasResult BaseAlias = + AAQI.AAR.alias(MemoryLocation::getBeforeOrAfter(UnderlyingV1), + MemoryLocation::getBeforeOrAfter(UnderlyingV2), AAQI); + return BaseAlias == AliasResult::NoAlias ? AliasResult::NoAlias + : AliasResult::MayAlias; + }; + if (!V1Size.hasValue() && !V2Size.hasValue()) { // TODO: This limitation exists for compile-time reasons. Relax it if we // can avoid exponential pathological cases. @@ -1092,11 +1079,7 @@ AliasResult BasicAAResult::aliasGEP( // If both accesses have unknown size, we can only check whether the base // objects don't alias. - AliasResult BaseAlias = - AAQI.AAR.alias(MemoryLocation::getBeforeOrAfter(UnderlyingV1), - MemoryLocation::getBeforeOrAfter(UnderlyingV2), AAQI); - return BaseAlias == AliasResult::NoAlias ? AliasResult::NoAlias - : AliasResult::MayAlias; + return BaseObjectsAlias(); } DominatorTree *DT = getDT(AAQI); @@ -1107,6 +1090,10 @@ AliasResult BasicAAResult::aliasGEP( if (DecompGEP1.Base == GEP1 && DecompGEP2.Base == V2) return AliasResult::MayAlias; + // Fall back to base objects if pointers have different index widths. + if (DecompGEP1.Offset.getBitWidth() != DecompGEP2.Offset.getBitWidth()) + return BaseObjectsAlias(); + // Swap GEP1 and GEP2 if GEP2 has more variable indices. if (DecompGEP1.VarIndices.size() < DecompGEP2.VarIndices.size()) { std::swap(DecompGEP1, DecompGEP2); diff --git a/llvm/test/Analysis/BasicAA/smaller-index-size-overflow.ll b/llvm/test/Analysis/BasicAA/smaller-index-size-overflow.ll index a913a4a9e4b1..fc91b577a56c 100644 --- a/llvm/test/Analysis/BasicAA/smaller-index-size-overflow.ll +++ b/llvm/test/Analysis/BasicAA/smaller-index-size-overflow.ll @@ -2,8 +2,7 @@ target datalayout = "p1:32:32" -; FIXME: This is a miscompile. -; CHECK: NoAlias: i32 addrspace(1)* %gep1, i32 addrspace(1)* %gep2 +; CHECK: PartialAlias: i32 addrspace(1)* %gep1, i32 addrspace(1)* %gep2 define void @test(ptr addrspace(1) %p) { %gep1 = getelementptr i8, ptr addrspace(1) %p, i32 u0x7fffffff %gep2 = getelementptr i8, ptr addrspace(1) %p, i32 u0x80000001 -- cgit v1.2.3 From 07aab4a3cdab3d46caab270845413c5ba4546b50 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 13 Dec 2024 13:01:01 +0100 Subject: [DataLayout] Remove getMaxIndexSizeInBits() API The last use was removed in #119365, and we should not add more uses of this concept in the future either. --- llvm/include/llvm/IR/DataLayout.h | 3 --- llvm/lib/IR/DataLayout.cpp | 7 ------- 2 files changed, 10 deletions(-) diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h index 5e6a6198a947..2ad080e6d0cd 100644 --- a/llvm/include/llvm/IR/DataLayout.h +++ b/llvm/include/llvm/IR/DataLayout.h @@ -365,9 +365,6 @@ public: return getPointerSpec(AS).BitWidth; } - /// Returns the maximum index size over all address spaces. - unsigned getMaxIndexSizeInBits() const; - /// Size in bits of index used for address calculation in getelementptr. unsigned getIndexSizeInBits(unsigned AS) const { return getPointerSpec(AS).IndexBitWidth; diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp index 5b3ce2d62efd..95a5e5989ad0 100644 --- a/llvm/lib/IR/DataLayout.cpp +++ b/llvm/lib/IR/DataLayout.cpp @@ -740,13 +740,6 @@ unsigned DataLayout::getPointerSize(unsigned AS) const { return divideCeil(getPointerSpec(AS).BitWidth, 8); } -unsigned DataLayout::getMaxIndexSizeInBits() const { - unsigned MaxIndexSize = 0; - for (const PointerSpec &Spec : PointerSpecs) - MaxIndexSize = std::max(MaxIndexSize, Spec.IndexBitWidth); - return MaxIndexSize; -} - unsigned DataLayout::getPointerTypeSizeInBits(Type *Ty) const { assert(Ty->isPtrOrPtrVectorTy() && "This should only be called with a pointer or pointer vector type"); -- cgit v1.2.3 From a25b2ba782dd5839492b135518f0a58d4a19e1f9 Mon Sep 17 00:00:00 2001 From: Yingwei Zheng Date: Fri, 13 Dec 2024 20:10:06 +0800 Subject: [AsmParser] Allow comparing ValIDs with different kinds (#119834) This patch allows comparing `t_[Local|Global]ID` with `t_[Local|Global]Name`. Closes https://github.com/llvm/llvm-project/issues/119818. --- llvm/include/llvm/AsmParser/LLParser.h | 11 +++++++---- llvm/test/Assembler/pr119818.ll | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 llvm/test/Assembler/pr119818.ll diff --git a/llvm/include/llvm/AsmParser/LLParser.h b/llvm/include/llvm/AsmParser/LLParser.h index 1ef8b8ffc396..8b195b028783 100644 --- a/llvm/include/llvm/AsmParser/LLParser.h +++ b/llvm/include/llvm/AsmParser/LLParser.h @@ -91,12 +91,15 @@ namespace llvm { } bool operator<(const ValID &RHS) const { - assert(Kind == RHS.Kind && "Comparing ValIDs of different kinds"); + assert((((Kind == t_LocalID || Kind == t_LocalName) && + (RHS.Kind == t_LocalID || RHS.Kind == t_LocalName)) || + ((Kind == t_GlobalID || Kind == t_GlobalName) && + (RHS.Kind == t_GlobalID || RHS.Kind == t_GlobalName))) && + "Comparing ValIDs of different kinds"); + if (Kind != RHS.Kind) + return Kind < RHS.Kind; if (Kind == t_LocalID || Kind == t_GlobalID) return UIntVal < RHS.UIntVal; - assert((Kind == t_LocalName || Kind == t_GlobalName || - Kind == t_ConstantStruct || Kind == t_PackedConstantStruct) && - "Ordering not defined for this ValID kind yet"); return StrVal < RHS.StrVal; } }; diff --git a/llvm/test/Assembler/pr119818.ll b/llvm/test/Assembler/pr119818.ll new file mode 100644 index 000000000000..568648424e4a --- /dev/null +++ b/llvm/test/Assembler/pr119818.ll @@ -0,0 +1,23 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 +; RUN: opt -S < %s | FileCheck %s + +@vm_exec_core.insns_address_table = internal constant [2 x ptr] [ptr blockaddress(@vm_exec_core, %0), ptr blockaddress(@vm_exec_core, %block)], align 16 + +define void @vm_exec_core() { +; CHECK-LABEL: define void @vm_exec_core() { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[BLOCK:.*]] +; CHECK: [[BLOCK]]: +; CHECK-NEXT: br label %[[BB0:.*]] +; CHECK: [[BB0]]: +; CHECK-NEXT: ret void +; +entry: + br label %block + +block: + br label %0 + +0: + ret void +} -- cgit v1.2.3 From 5fd385b3c145270bb9a6388d998a870bf3f79b54 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser Date: Fri, 13 Dec 2024 13:17:19 +0100 Subject: [libc++][NFC] Simplify the implementation of string and string_views operator== (#117184) --- libcxx/include/string | 40 ++++++++-------------------------------- libcxx/include/string_view | 40 ++++++++++++---------------------------- 2 files changed, 20 insertions(+), 60 deletions(-) diff --git a/libcxx/include/string b/libcxx/include/string index 17bf4b3b98bf..e96237488b80 100644 --- a/libcxx/include/string +++ b/libcxx/include/string @@ -1881,11 +1881,6 @@ public: _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __clear_and_shrink() _NOEXCEPT; private: - template - inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool friend - operator==(const basic_string, _Alloc>& __lhs, - const basic_string, _Alloc>& __rhs) _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __shrink_or_extend(size_type __target_capacity); _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_STRING_INTERNAL_MEMORY_ACCESS bool @@ -3842,36 +3837,9 @@ template inline _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI bool operator==(const basic_string<_CharT, _Traits, _Allocator>& __lhs, const basic_string<_CharT, _Traits, _Allocator>& __rhs) _NOEXCEPT { -# if _LIBCPP_STD_VER >= 20 - return basic_string_view<_CharT, _Traits>(__lhs) == basic_string_view<_CharT, _Traits>(__rhs); -# else size_t __lhs_sz = __lhs.size(); return __lhs_sz == __rhs.size() && _Traits::compare(__lhs.data(), __rhs.data(), __lhs_sz) == 0; -# endif -} - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI bool -operator==(const basic_string, _Allocator>& __lhs, - const basic_string, _Allocator>& __rhs) _NOEXCEPT { - size_t __sz = __lhs.size(); - if (__sz != __rhs.size()) - return false; - return char_traits::compare(__lhs.data(), __rhs.data(), __sz) == 0; -} - -# if _LIBCPP_STD_VER <= 17 -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator==(const _CharT* __lhs, const basic_string<_CharT, _Traits, _Allocator>& __rhs) _NOEXCEPT { - typedef basic_string<_CharT, _Traits, _Allocator> _String; - _LIBCPP_ASSERT_NON_NULL(__lhs != nullptr, "operator==(char*, basic_string): received nullptr"); - size_t __lhs_len = _Traits::length(__lhs); - if (__lhs_len != __rhs.size()) - return false; - return __rhs.compare(0, _String::npos, __lhs, __lhs_len) == 0; } -# endif // _LIBCPP_STD_VER <= 17 template inline _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI bool @@ -3890,6 +3858,14 @@ operator==(const basic_string<_CharT, _Traits, _Allocator>& __lhs, const _CharT* return __lhs.compare(0, _String::npos, __rhs, __rhs_len) == 0; } +# if _LIBCPP_STD_VER <= 17 +template +inline _LIBCPP_HIDE_FROM_ABI bool +operator==(const _CharT* __lhs, const basic_string<_CharT, _Traits, _Allocator>& __rhs) _NOEXCEPT { + return __rhs == __lhs; +} +# endif // _LIBCPP_STD_VER <= 17 + # if _LIBCPP_STD_VER >= 20 template diff --git a/libcxx/include/string_view b/libcxx/include/string_view index 27b9f152ea29..a62d75a008c0 100644 --- a/libcxx/include/string_view +++ b/libcxx/include/string_view @@ -722,16 +722,19 @@ basic_string_view(_Range) -> basic_string_view>; // [string.view.comparison] -# if _LIBCPP_STD_VER >= 20 - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool operator==(basic_string_view<_CharT, _Traits> __lhs, - type_identity_t> __rhs) noexcept { +// The dummy default template parameters are used to work around a MSVC issue with mangling, see VSO-409326 for details. +// This applies to the other sufficient overloads below for the other comparison operators. +template +_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool +operator==(basic_string_view<_CharT, _Traits> __lhs, + __type_identity_t > __rhs) _NOEXCEPT { if (__lhs.size() != __rhs.size()) return false; return __lhs.compare(__rhs) == 0; } +# if _LIBCPP_STD_VER >= 20 + template _LIBCPP_HIDE_FROM_ABI constexpr auto operator<=>(basic_string_view<_CharT, _Traits> __lhs, type_identity_t> __rhs) noexcept { @@ -757,51 +760,32 @@ operator==(basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _ return __lhs.compare(__rhs) == 0; } -// The dummy default template parameters are used to work around a MSVC issue with mangling, see VSO-409326 for details. -// This applies to the other sufficient overloads below for the other comparison operators. -template -_LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool -operator==(basic_string_view<_CharT, _Traits> __lhs, - __type_identity_t > __rhs) _NOEXCEPT { - if (__lhs.size() != __rhs.size()) - return false; - return __lhs.compare(__rhs) == 0; -} - template _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator==(__type_identity_t > __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT { - if (__lhs.size() != __rhs.size()) - return false; - return __lhs.compare(__rhs) == 0; + return __lhs == __rhs; } // operator != template _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator!=(basic_string_view<_CharT, _Traits> __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT { - if (__lhs.size() != __rhs.size()) - return true; - return __lhs.compare(__rhs) != 0; + return !(__lhs == __rhs); } template _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator!=(basic_string_view<_CharT, _Traits> __lhs, __type_identity_t > __rhs) _NOEXCEPT { - if (__lhs.size() != __rhs.size()) - return true; - return __lhs.compare(__rhs) != 0; + return !(__lhs == __rhs); } template _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator!=(__type_identity_t > __lhs, basic_string_view<_CharT, _Traits> __rhs) _NOEXCEPT { - if (__lhs.size() != __rhs.size()) - return true; - return __lhs.compare(__rhs) != 0; + return !(__lhs == __rhs); } // operator < -- cgit v1.2.3 From 7c9404c279cfa13e24a043e6357cc85bd12f55f1 Mon Sep 17 00:00:00 2001 From: "Ivan R. Ivanov" Date: Fri, 13 Dec 2024 21:44:43 +0900 Subject: [flang][OpenMP] Add frontend support for ompx_bare clause (#111106) --- clang/lib/Parse/ParseOpenMP.cpp | 10 ++++++++ flang/lib/Lower/OpenMP/ClauseProcessor.cpp | 4 +++ flang/lib/Lower/OpenMP/ClauseProcessor.h | 1 + flang/lib/Lower/OpenMP/OpenMP.cpp | 2 ++ flang/lib/Parser/openmp-parsers.cpp | 1 + flang/lib/Semantics/check-omp-structure.cpp | 12 ++++++++- .../Lower/OpenMP/KernelLanguage/bare-clause.f90 | 10 ++++++++ flang/test/Semantics/OpenMP/ompx-bare.f90 | 30 ++++++++++++++++++++++ .../llvm/Frontend/OpenMP/ConstructDecompositionT.h | 9 +++++++ llvm/include/llvm/Frontend/OpenMP/OMP.td | 1 + mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td | 26 +++++++++++++++++++ mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td | 9 ++++--- mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp | 14 +++++----- .../Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp | 5 ++++ 14 files changed, 122 insertions(+), 12 deletions(-) create mode 100644 flang/test/Lower/OpenMP/KernelLanguage/bare-clause.f90 create mode 100644 flang/test/Semantics/OpenMP/ompx-bare.f90 diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index b91928063169..b4e973bc84a7 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -3474,6 +3474,16 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, Clause = ParseOpenMPOMPXAttributesClause(WrongDirective); break; case OMPC_ompx_bare: + if (DKind == llvm::omp::Directive::OMPD_target) { + // Flang splits the combined directives which requires OMPD_target to be + // marked as accepting the `ompx_bare` clause in `OMP.td`. Thus, we need + // to explicitly check whether this clause is applied to an `omp target` + // without `teams` and emit an error. + Diag(Tok, diag::err_omp_unexpected_clause) + << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + ErrorFound = true; + WrongDirective = true; + } if (WrongDirective) Diag(Tok, diag::note_ompx_bare_clause) << getOpenMPClauseName(CKind) << "target teams"; diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp index 48c559a78b9b..3c9831120351 100644 --- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp +++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp @@ -220,6 +220,10 @@ static void convertLoopBounds(lower::AbstractConverter &converter, // ClauseProcessor unique clauses //===----------------------------------------------------------------------===// +bool ClauseProcessor::processBare(mlir::omp::BareClauseOps &result) const { + return markClauseOccurrence(result.bare); +} + bool ClauseProcessor::processBind(mlir::omp::BindClauseOps &result) const { if (auto *clause = findUniqueClause()) { fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder(); diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.h b/flang/lib/Lower/OpenMP/ClauseProcessor.h index e0fe917c50e8..3942c54e6e93 100644 --- a/flang/lib/Lower/OpenMP/ClauseProcessor.h +++ b/flang/lib/Lower/OpenMP/ClauseProcessor.h @@ -53,6 +53,7 @@ public: : converter(converter), semaCtx(semaCtx), clauses(clauses) {} // 'Unique' clauses: They can appear at most once in the clause list. + bool processBare(mlir::omp::BareClauseOps &result) const; bool processBind(mlir::omp::BindClauseOps &result) const; bool processCollapse(mlir::Location currentLocation, lower::pft::Evaluation &eval, diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp index c167d347b431..f30d2687682c 100644 --- a/flang/lib/Lower/OpenMP/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP/OpenMP.cpp @@ -1184,6 +1184,7 @@ static void genTargetClauses( llvm::SmallVectorImpl &isDevicePtrSyms, llvm::SmallVectorImpl &mapSyms) { ClauseProcessor cp(converter, semaCtx, clauses); + cp.processBare(clauseOps); cp.processDepend(clauseOps); cp.processDevice(stmtCtx, clauseOps); cp.processHasDeviceAddr(clauseOps, hasDeviceAddrSyms); @@ -2860,6 +2861,7 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, !std::holds_alternative(clause.u) && !std::holds_alternative(clause.u) && !std::holds_alternative(clause.u) && + !std::holds_alternative(clause.u) && !std::holds_alternative(clause.u) && !std::holds_alternative(clause.u) && !std::holds_alternative(clause.u) && diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index 7d10de8c6097..791fee3507b4 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -657,6 +657,7 @@ TYPE_PARSER( parenthesized(scalarIntExpr))) || "NUM_THREADS" >> construct(construct( parenthesized(scalarIntExpr))) || + "OMPX_BARE" >> construct(construct()) || "ORDER" >> construct(construct( parenthesized(Parser{}))) || "ORDERED" >> construct(construct( diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index d63f7a5aea3a..3b2033de4554 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -2867,7 +2867,6 @@ CHECK_SIMPLE_CLAUSE(Align, OMPC_align) CHECK_SIMPLE_CLAUSE(Compare, OMPC_compare) CHECK_SIMPLE_CLAUSE(CancellationConstructType, OMPC_cancellation_construct_type) CHECK_SIMPLE_CLAUSE(OmpxAttribute, OMPC_ompx_attribute) -CHECK_SIMPLE_CLAUSE(OmpxBare, OMPC_ompx_bare) CHECK_SIMPLE_CLAUSE(Weak, OMPC_weak) CHECK_REQ_SCALAR_INT_CLAUSE(NumTeams, OMPC_num_teams) @@ -4395,6 +4394,17 @@ void OmpStructureChecker::Enter(const parser::OmpClause::To &x) { } } +void OmpStructureChecker::Enter(const parser::OmpClause::OmpxBare &x) { + // Don't call CheckAllowedClause, because it allows "ompx_bare" on + // a non-combined "target" directive (for reasons of splitting combined + // directives). In source code it's only allowed on "target teams". + if (GetContext().directive != llvm::omp::Directive::OMPD_target_teams) { + context_.Say(GetContext().clauseSource, + "%s clause is only allowed on combined TARGET TEAMS"_err_en_US, + parser::ToUpperCaseLetters(getClauseName(llvm::omp::OMPC_ompx_bare))); + } +} + llvm::StringRef OmpStructureChecker::getClauseName(llvm::omp::Clause clause) { return llvm::omp::getOpenMPClauseName(clause); } diff --git a/flang/test/Lower/OpenMP/KernelLanguage/bare-clause.f90 b/flang/test/Lower/OpenMP/KernelLanguage/bare-clause.f90 new file mode 100644 index 000000000000..1445c4fa225d --- /dev/null +++ b/flang/test/Lower/OpenMP/KernelLanguage/bare-clause.f90 @@ -0,0 +1,10 @@ +! RUN: %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=51 %s -o - | FileCheck %s + +program test + integer :: tmp + !$omp target teams ompx_bare num_teams(42) thread_limit(43) + tmp = 1 + !$omp end target teams +end program + +! CHECK: omp.target ompx_bare diff --git a/flang/test/Semantics/OpenMP/ompx-bare.f90 b/flang/test/Semantics/OpenMP/ompx-bare.f90 new file mode 100644 index 000000000000..21a603e9a826 --- /dev/null +++ b/flang/test/Semantics/OpenMP/ompx-bare.f90 @@ -0,0 +1,30 @@ +!RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=51 + +subroutine test1 +!ERROR: OMPX_BARE clause is only allowed on combined TARGET TEAMS + !$omp target ompx_bare + !$omp end target +end + +subroutine test2 + !$omp target +!ERROR: OMPX_BARE clause is only allowed on combined TARGET TEAMS + !$omp teams ompx_bare + !$omp end teams + !$omp end target +end + +subroutine test3 + integer i +!ERROR: OMPX_BARE clause is only allowed on combined TARGET TEAMS + !$omp target teams distribute ompx_bare + do i = 0, 10 + end do + !$omp end target teams distribute +end + +subroutine test4 +!No errors + !$omp target teams ompx_bare + !$omp end target teams +end diff --git a/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h b/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h index 4bdfa1cf4c14..20fb581ee631 100644 --- a/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h +++ b/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h @@ -239,6 +239,8 @@ private: bool applyClause(const tomp::clause::OmpxAttributeT &clause, const ClauseTy *); + bool applyClause(const tomp::clause::OmpxBareT &clause, + const ClauseTy *); uint32_t version; llvm::omp::Directive construct; @@ -1103,6 +1105,13 @@ bool ConstructDecompositionT::applyClause( return applyToOutermost(node); } +template +bool ConstructDecompositionT::applyClause( + const tomp::clause::OmpxBareT &clause, + const ClauseTy *node) { + return applyToOutermost(node); +} + template bool ConstructDecompositionT::applyClause( const tomp::clause::OmpxAttributeT &clause, diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td index 4f23a6792d63..6d04ee21ab50 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -1018,6 +1018,7 @@ def OMP_Target : Directive<"target"> { VersionedClause, VersionedClause, VersionedClause, + VersionedClause, VersionedClause, VersionedClause, ]; diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td index 077d6602628a..98d2e80ed2d8 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td @@ -84,6 +84,32 @@ class OpenMP_AllocateClauseSkip< def OpenMP_AllocateClause : OpenMP_AllocateClauseSkip<>; +//===----------------------------------------------------------------------===// +// LLVM OpenMP extension `ompx_bare` clause +//===----------------------------------------------------------------------===// + +class OpenMP_BareClauseSkip< + bit traits = false, bit arguments = false, bit assemblyFormat = false, + bit description = false, bit extraClassDeclaration = false + > : OpenMP_Clause { + let arguments = (ins + UnitAttr:$bare + ); + + let optAssemblyFormat = [{ + `ompx_bare` $bare + }]; + + let description = [{ + `ompx_bare` allows `omp target teams` to be executed on a GPU with an + explicit number of teams and threads. This clause also allows the teams and + threads sizes to have up to 3 dimensions. + }]; +} + +def OpenMP_BareClause : OpenMP_BareClauseSkip<>; + //===----------------------------------------------------------------------===// // V5.2: [16.1, 16.2] `cancel-directive-name` clause set //===----------------------------------------------------------------------===// diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td index 89c7ed46ff50..65aa260a80cc 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td @@ -1223,10 +1223,11 @@ def TargetOp : OpenMP_Op<"target", traits = [ OutlineableOpenMPOpInterface ], clauses = [ // TODO: Complete clause list (defaultmap, uses_allocators). - OpenMP_AllocateClause, OpenMP_DependClause, OpenMP_DeviceClause, - OpenMP_HasDeviceAddrClause, OpenMP_IfClause, OpenMP_InReductionClause, - OpenMP_IsDevicePtrClause, OpenMP_MapClauseSkip, - OpenMP_NowaitClause, OpenMP_PrivateClause, OpenMP_ThreadLimitClause + OpenMP_AllocateClause, OpenMP_BareClause, OpenMP_DependClause, + OpenMP_DeviceClause, OpenMP_HasDeviceAddrClause, OpenMP_IfClause, + OpenMP_InReductionClause, OpenMP_IsDevicePtrClause, + OpenMP_MapClauseSkip, OpenMP_NowaitClause, + OpenMP_PrivateClause, OpenMP_ThreadLimitClause, ], singleRegion = true> { let summary = "target construct"; let description = [{ diff --git a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp index e20530be07b2..3d62b3218869 100644 --- a/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp +++ b/mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp @@ -1709,13 +1709,13 @@ void TargetOp::build(OpBuilder &builder, OperationState &state, // TODO Store clauses in op: allocateVars, allocatorVars, inReductionVars, // inReductionByref, inReductionSyms. TargetOp::build(builder, state, /*allocate_vars=*/{}, /*allocator_vars=*/{}, - makeArrayAttr(ctx, clauses.dependKinds), clauses.dependVars, - clauses.device, clauses.hasDeviceAddrVars, clauses.ifExpr, - /*in_reduction_vars=*/{}, /*in_reduction_byref=*/nullptr, - /*in_reduction_syms=*/nullptr, clauses.isDevicePtrVars, - clauses.mapVars, clauses.nowait, clauses.privateVars, - makeArrayAttr(ctx, clauses.privateSyms), clauses.threadLimit, - /*private_maps=*/nullptr); + clauses.bare, makeArrayAttr(ctx, clauses.dependKinds), + clauses.dependVars, clauses.device, clauses.hasDeviceAddrVars, + clauses.ifExpr, /*in_reduction_vars=*/{}, + /*in_reduction_byref=*/nullptr, /*in_reduction_syms=*/nullptr, + clauses.isDevicePtrVars, clauses.mapVars, clauses.nowait, + clauses.privateVars, makeArrayAttr(ctx, clauses.privateSyms), + clauses.threadLimit, /*private_maps=*/nullptr); } LogicalResult TargetOp::verify() { diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp index ff8606ed6b3f..060113c41232 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp @@ -158,6 +158,10 @@ static LogicalResult checkImplementationStatus(Operation &op) { if (!op.getAllocateVars().empty() || !op.getAllocatorVars().empty()) result = todo("allocate"); }; + auto checkBare = [&todo](auto op, LogicalResult &result) { + if (op.getBare()) + result = todo("ompx_bare"); + }; auto checkDepend = [&todo](auto op, LogicalResult &result) { if (!op.getDependVars().empty() || op.getDependKinds()) result = todo("depend"); @@ -283,6 +287,7 @@ static LogicalResult checkImplementationStatus(Operation &op) { [&](auto op) { checkDepend(op, result); }) .Case([&](omp::TargetOp op) { checkAllocate(op, result); + checkBare(op, result); checkDevice(op, result); checkHasDeviceAddr(op, result); checkIf(op, result); -- cgit v1.2.3 From a21f9bfe29c2b9f1967952d12a5b7cb8f8b75202 Mon Sep 17 00:00:00 2001 From: Danial Klimkin Date: Fri, 13 Dec 2024 13:56:28 +0100 Subject: [bazel]Fix Bazel build past bc29fc937c6cb4a210f80c93c79fc6ed97c801f8 (#119874) --- utils/bazel/llvm-project-overlay/mlir/BUILD.bazel | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel index b5be59051cdf..b9ee2e4436fc 100644 --- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel @@ -5167,6 +5167,7 @@ cc_library( ":FuncDialect", ":FunctionInterfaces", ":GPUDialect", + ":GPUUtils", ":IR", ":LinalgDialect", ":MemRefDialect", @@ -5795,6 +5796,7 @@ cc_library( ":ExecutionEngineUtils", ":FuncDialect", ":GPUDialect", + ":GPUUtils", ":GPUPassIncGen", ":GPUToLLVMIRTranslation", ":IR", @@ -5829,6 +5831,26 @@ cc_library( ]), ) +cc_library( + name = "GPUUtils", + srcs = glob( + [ + "lib/Dialect/GPU/Utils/*.cpp", + ], + ), + hdrs = glob(["include/mlir/Dialect/GPU/Utils/*.h"]), + includes = ["include"], + deps = [ + ":AffineDialect", + ":ArithDialect", + ":GPUDialect", + ":IR", + ":Support", + ":VectorDialect", + "//llvm:Support", + ], +) + td_library( name = "GPUTransformOpsTdFiles", srcs = [ @@ -6188,6 +6210,7 @@ cc_library( ":FuncToLLVM", ":GPUCommonTransforms", ":GPUDialect", + ":GPUUtils", ":GPUTransforms", ":IR", ":LLVMCommonConversion", -- cgit v1.2.3 From d098ce0ec9e4dddb494f1f61ff36921dd4ce5f8e Mon Sep 17 00:00:00 2001 From: Dmitry Vasilyev Date: Fri, 13 Dec 2024 16:59:31 +0400 Subject: [llvm][Support][Windows] Refactored remove_directories() w/o CComPtr and atlbase.h (#119843) This is the update of #118677. This patch fixes building with mingw. --- llvm/lib/Support/Windows/Path.inc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc index d4e8261ae4fe..17db114caeb1 100644 --- a/llvm/lib/Support/Windows/Path.inc +++ b/llvm/lib/Support/Windows/Path.inc @@ -25,7 +25,6 @@ // These two headers must be included last, and make sure shlobj is required // after Windows.h to make sure it picks up our definition of _WIN32_WINNT #include "llvm/Support/Windows/WindowsSupport.h" -#include #include #include @@ -1395,19 +1394,22 @@ std::error_code remove_directories(const Twine &path, bool IgnoreErrors) { if (FAILED(HR)) break; auto Uninitialize = make_scope_exit([] { CoUninitialize(); }); - CComPtr FileOp; - HR = FileOp.CoCreateInstance(CLSID_FileOperation); + IFileOperation *FileOp = NULL; + HR = CoCreateInstance(CLSID_FileOperation, NULL, CLSCTX_ALL, + IID_PPV_ARGS(&FileOp)); if (FAILED(HR)) break; + auto FileOpRelease = make_scope_exit([&FileOp] { FileOp->Release(); }); HR = FileOp->SetOperationFlags(FOF_NO_UI | FOFX_NOCOPYHOOKS); if (FAILED(HR)) break; PIDLIST_ABSOLUTE PIDL = ILCreateFromPathW(Path16.data()); auto FreePIDL = make_scope_exit([&PIDL] { ILFree(PIDL); }); - CComPtr ShItem; + IShellItem *ShItem = NULL; HR = SHCreateItemFromIDList(PIDL, IID_PPV_ARGS(&ShItem)); if (FAILED(HR)) break; + auto ShItemRelease = make_scope_exit([&ShItem] { ShItem->Release(); }); HR = FileOp->DeleteItem(ShItem, NULL); if (FAILED(HR)) break; -- cgit v1.2.3 From 12a42a60f9e63fab5699b210248b5b51bd21b6e3 Mon Sep 17 00:00:00 2001 From: VScigolevs Date: Fri, 13 Dec 2024 15:12:09 +0200 Subject: Fix SemaCXX/msvc-pragma-function-no-builtin-attr.cpp test (#119719) Fix test failure from #119719 84b0f0145887bbfe49fd4dc85490b14108a72cee --- clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp b/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp index cd2ac7d1edbe..066c66884e33 100644 --- a/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp +++ b/clang/test/SemaCXX/msvc-pragma-function-no-builtin-attr.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cl -fms-compatibility -Xclang -ast-dump -fsyntax-only %s | FileCheck %s +// RUN: %clang_cl -fms-compatibility -Xclang -ast-dump -fsyntax-only -- %s | FileCheck %s extern "C" __inline float __cdecl fabsf( float _X); // CHECK: FunctionDecl {{.*}} fabsf -- cgit v1.2.3 From fb8df8cb658278ceba9ef4b96e0b448aed32c1f6 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Fri, 13 Dec 2024 14:29:59 +0100 Subject: [lldb/DWARF] s/DWARFRangeList/llvm::DWARFAddressRangeVector (#116620) The main difference is that the llvm class (just a std::vector in disguise) is not sorted. It turns out this isn't an issue because the callers either: - ignore the range list; - convert it to a different format (which is then sorted); - or query the minimum value (which is faster than sorting) The last case is something I want to get rid of in a followup as a part of removing the assumption that function's entry point is also its lowest address. --- lldb/include/lldb/Core/dwarf.h | 3 - lldb/source/Plugins/SymbolFile/DWARF/DIERef.h | 3 +- .../SymbolFile/DWARF/DWARFASTParserClang.cpp | 3 +- .../Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp | 19 +++-- lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp | 43 ++++++---- lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h | 11 +-- .../SymbolFile/DWARF/DWARFDebugInfoEntry.cpp | 96 +++++++++++----------- .../Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h | 20 ++--- lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp | 67 +++++++-------- lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h | 7 +- .../Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp | 81 ++++++++++-------- 11 files changed, 185 insertions(+), 168 deletions(-) diff --git a/lldb/include/lldb/Core/dwarf.h b/lldb/include/lldb/Core/dwarf.h index e162a090ba7c..4de5c8f24db0 100644 --- a/lldb/include/lldb/Core/dwarf.h +++ b/lldb/include/lldb/Core/dwarf.h @@ -9,7 +9,6 @@ #ifndef LLDB_CORE_DWARF_H #define LLDB_CORE_DWARF_H -#include "lldb/Utility/RangeMap.h" #include // Get the DWARF constant definitions from llvm @@ -40,6 +39,4 @@ typedef uint64_t dw_offset_t; // Dwarf Debug Information Entry offset for any #define DW_EH_PE_MASK_ENCODING 0x0F -typedef lldb_private::RangeVector DWARFRangeList; - #endif // LLDB_CORE_DWARF_H diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DIERef.h b/lldb/source/Plugins/SymbolFile/DWARF/DIERef.h index ad443aacb46e..69be0aa1280c 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DIERef.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DIERef.h @@ -10,7 +10,8 @@ #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DIEREF_H #include "lldb/Core/dwarf.h" -#include "lldb/Utility/LLDBAssert.h" +#include "lldb/lldb-defines.h" +#include "lldb/lldb-types.h" #include #include diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 37c1132c1c9f..58f7b805abe2 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -45,6 +45,7 @@ #include "clang/AST/Type.h" #include "clang/Basic/Specifiers.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" #include "llvm/DebugInfo/DWARF/DWARFTypePrinter.h" #include "llvm/Demangle/Demangle.h" @@ -2360,7 +2361,7 @@ DWARFASTParserClang::ConstructDemangledNameFromDWARF(const DWARFDIE &die) { Function *DWARFASTParserClang::ParseFunctionFromDWARF( CompileUnit &comp_unit, const DWARFDIE &die, AddressRanges func_ranges) { - DWARFRangeList unused_func_ranges; + llvm::DWARFAddressRangesVector unused_func_ranges; const char *name = nullptr; const char *mangled = nullptr; std::optional decl_file; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp index ec4c297cf7e1..7f2edbfa95fe 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp @@ -8,11 +8,13 @@ #include "DWARFCompileUnit.h" #include "DWARFDebugAranges.h" +#include "LogChannelDWARF.h" #include "SymbolFileDWARFDebugMap.h" #include "lldb/Symbol/CompileUnit.h" #include "lldb/Symbol/LineTable.h" #include "lldb/Utility/Stream.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" using namespace lldb; using namespace lldb_private; @@ -41,14 +43,17 @@ void DWARFCompileUnit::BuildAddressRangeTable( const dw_offset_t cu_offset = GetOffset(); if (die) { - DWARFRangeList ranges = + llvm::Expected ranges = die->GetAttributeAddressRanges(this, /*check_hi_lo_pc=*/true); - for (const DWARFRangeList::Entry &range : ranges) - debug_aranges->AppendRange(cu_offset, range.GetRangeBase(), - range.GetRangeEnd()); - - if (!ranges.IsEmpty()) - return; + if (ranges) { + for (const llvm::DWARFAddressRange &range : *ranges) + debug_aranges->AppendRange(cu_offset, range.LowPC, range.HighPC); + if (!ranges->empty()) + return; + } else { + LLDB_LOG_ERROR(GetLog(DWARFLog::DebugInfo), ranges.takeError(), + "{1:x}: {0}", cu_offset); + } } if (debug_aranges->GetNumRanges() == num_debug_aranges) { diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp index 362f4c44240c..96b13efe5835 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp @@ -13,10 +13,12 @@ #include "DWARFDebugInfoEntry.h" #include "DWARFDeclContext.h" #include "DWARFUnit.h" +#include "LogChannelDWARF.h" #include "lldb/Symbol/Type.h" #include "llvm/ADT/iterator.h" #include "llvm/BinaryFormat/Dwarf.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" using namespace lldb_private; using namespace lldb_private::dwarf; @@ -172,21 +174,27 @@ DWARFDIE::LookupDeepestBlock(lldb::addr_t address) const { } if (match_addr_range) { - DWARFRangeList ranges = - m_die->GetAttributeAddressRanges(m_cu, /*check_hi_lo_pc=*/true); - if (ranges.FindEntryThatContains(address)) { - check_children = true; - switch (Tag()) { - default: - break; - - case DW_TAG_inlined_subroutine: // Inlined Function - case DW_TAG_lexical_block: // Block { } in code - result = *this; - break; + if (llvm::Expected ranges = + m_die->GetAttributeAddressRanges(m_cu, /*check_hi_lo_pc=*/true)) { + bool addr_in_range = + llvm::any_of(*ranges, [&](const llvm::DWARFAddressRange &r) { + return r.LowPC <= address && address < r.HighPC; + }); + if (addr_in_range) { + switch (Tag()) { + default: + break; + + case DW_TAG_inlined_subroutine: // Inlined Function + case DW_TAG_lexical_block: // Block { } in code + result = *this; + break; + } } + check_children = addr_in_range; } else { - check_children = false; + LLDB_LOG_ERROR(GetLog(DWARFLog::DebugInfo), ranges.takeError(), + "DIE({1:x}): {0}", GetID()); } } @@ -559,10 +567,11 @@ bool DWARFDIE::IsMethod() const { } bool DWARFDIE::GetDIENamesAndRanges( - const char *&name, const char *&mangled, DWARFRangeList &ranges, - std::optional &decl_file, std::optional &decl_line, - std::optional &decl_column, std::optional &call_file, - std::optional &call_line, std::optional &call_column, + const char *&name, const char *&mangled, + llvm::DWARFAddressRangesVector &ranges, std::optional &decl_file, + std::optional &decl_line, std::optional &decl_column, + std::optional &call_file, std::optional &call_line, + std::optional &call_column, lldb_private::DWARFExpressionList *frame_base) const { if (IsValid()) { return m_die->GetDIENamesAndRanges( diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h index 5c1d381930c4..c3239b5b121f 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.h @@ -12,6 +12,7 @@ #include "DWARFBaseDIE.h" #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/iterator_range.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" namespace lldb_private::plugin { namespace dwarf { @@ -97,11 +98,11 @@ public: GetAttributeValueAsReferenceDIE(const dw_attr_t attr) const; bool GetDIENamesAndRanges( - const char *&name, const char *&mangled, DWARFRangeList &ranges, - std::optional &decl_file, std::optional &decl_line, - std::optional &decl_column, std::optional &call_file, - std::optional &call_line, std::optional &call_column, - DWARFExpressionList *frame_base) const; + const char *&name, const char *&mangled, + llvm::DWARFAddressRangesVector &ranges, std::optional &decl_file, + std::optional &decl_line, std::optional &decl_column, + std::optional &call_file, std::optional &call_line, + std::optional &call_column, DWARFExpressionList *frame_base) const; // The following methods use LLVM naming convension in order to be are used by // LLVM libraries. diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp index 4ecb2ed616a1..6d073411de87 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp @@ -14,13 +14,15 @@ #include #include -#include "llvm/Support/LEB128.h" - +#include "LogChannelDWARF.h" #include "lldb/Core/Module.h" #include "lldb/Expression/DWARFExpression.h" #include "lldb/Symbol/ObjectFile.h" -#include "lldb/Utility/Stream.h" -#include "lldb/Utility/StreamString.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" +#include "llvm/Support/Error.h" +#include "llvm/Support/FormatAdapters.h" +#include "llvm/Support/LEB128.h" #include "DWARFCompileUnit.h" #include "DWARFDebugAranges.h" @@ -31,8 +33,6 @@ #include "SymbolFileDWARF.h" #include "SymbolFileDWARFDwo.h" -#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" - using namespace lldb_private; using namespace lldb_private::dwarf; using namespace lldb_private::plugin::dwarf; @@ -82,24 +82,11 @@ bool DWARFDebugInfoEntry::Extract(const DWARFDataExtractor &data, return true; } -static DWARFRangeList GetRangesOrReportError(DWARFUnit &unit, - const DWARFDebugInfoEntry &die, - const DWARFFormValue &value) { - llvm::Expected expected_ranges = - (value.Form() == DW_FORM_rnglistx) - ? unit.FindRnglistFromIndex(value.Unsigned()) - : unit.FindRnglistFromOffset(value.Unsigned()); - if (expected_ranges) - return std::move(*expected_ranges); - - unit.GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError( - "[{0:x16}]: DIE has DW_AT_ranges({1} {2:x16}) attribute, but " - "range extraction failed ({3}), please file a bug " - "and attach the file at the start of this error message", - die.GetOffset(), - llvm::dwarf::FormEncodingString(value.Form()).str().c_str(), - value.Unsigned(), toString(expected_ranges.takeError()).c_str()); - return DWARFRangeList(); +static llvm::Expected +GetRanges(DWARFUnit &unit, const DWARFFormValue &value) { + return (value.Form() == DW_FORM_rnglistx) + ? unit.FindRnglistFromIndex(value.Unsigned()) + : unit.FindRnglistFromOffset(value.Unsigned()); } static void ExtractAttrAndFormValue( @@ -117,7 +104,7 @@ static void ExtractAttrAndFormValue( // DW_AT_low_pc/DW_AT_high_pc pair, DW_AT_entry_pc, or DW_AT_ranges attributes. bool DWARFDebugInfoEntry::GetDIENamesAndRanges( DWARFUnit *cu, const char *&name, const char *&mangled, - DWARFRangeList &ranges, std::optional &decl_file, + llvm::DWARFAddressRangesVector &ranges, std::optional &decl_file, std::optional &decl_line, std::optional &decl_column, std::optional &call_file, std::optional &call_line, std::optional &call_column, DWARFExpressionList *frame_base) const { @@ -173,7 +160,17 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( break; case DW_AT_ranges: - ranges = GetRangesOrReportError(*cu, *this, form_value); + if (llvm::Expected r = + GetRanges(*cu, form_value)) { + ranges = std::move(*r); + } else { + module->ReportError( + "[{0:x16}]: DIE has DW_AT_ranges({1} {2:x16}) attribute, but " + "range extraction failed ({3}), please file a bug " + "and attach the file at the start of this error message", + GetOffset(), llvm::dwarf::FormEncodingString(form_value.Form()), + form_value.Unsigned(), fmt_consume(r.takeError())); + } break; case DW_AT_name: @@ -259,22 +256,20 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( } } - if (ranges.IsEmpty()) { - if (lo_pc != LLDB_INVALID_ADDRESS) { - if (hi_pc != LLDB_INVALID_ADDRESS && hi_pc > lo_pc) - ranges.Append(DWARFRangeList::Entry(lo_pc, hi_pc - lo_pc)); - else - ranges.Append(DWARFRangeList::Entry(lo_pc, 0)); - } + if (ranges.empty() && lo_pc != LLDB_INVALID_ADDRESS) { + lldb::addr_t range_hi_pc = + (hi_pc != LLDB_INVALID_ADDRESS && hi_pc > lo_pc) ? hi_pc : lo_pc; + ranges.emplace_back(lo_pc, range_hi_pc); } - if (set_frame_base_loclist_addr) { - dw_addr_t lowest_range_pc = ranges.GetMinRangeBase(0); + if (set_frame_base_loclist_addr && !ranges.empty()) { + // TODO: Use the first range instead. + dw_addr_t lowest_range_pc = llvm::min_element(ranges)->LowPC; assert(lowest_range_pc >= cu->GetBaseAddress()); frame_base->SetFuncFileAddress(lowest_range_pc); } - if (ranges.IsEmpty() || name == nullptr || mangled == nullptr) { + if (ranges.empty() || name == nullptr || mangled == nullptr) { for (const DWARFDIE &die : dies) { if (die) { die.GetDIE()->GetDIENamesAndRanges(die.GetCU(), name, mangled, ranges, @@ -283,7 +278,7 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( } } } - return !ranges.IsEmpty(); + return !ranges.empty(); } // Get all attribute values for a given DIE, including following any @@ -499,24 +494,23 @@ bool DWARFDebugInfoEntry::GetAttributeAddressRange( return false; } -DWARFRangeList DWARFDebugInfoEntry::GetAttributeAddressRanges( +llvm::Expected +DWARFDebugInfoEntry::GetAttributeAddressRanges( DWARFUnit *cu, bool check_hi_lo_pc, bool check_elaborating_dies) const { DWARFFormValue form_value; if (GetAttributeValue(cu, DW_AT_ranges, form_value)) - return GetRangesOrReportError(*cu, *this, form_value); + return GetRanges(*cu, form_value); - DWARFRangeList ranges; if (check_hi_lo_pc) { dw_addr_t lo_pc = LLDB_INVALID_ADDRESS; dw_addr_t hi_pc = LLDB_INVALID_ADDRESS; if (GetAttributeAddressRange(cu, lo_pc, hi_pc, LLDB_INVALID_ADDRESS, - check_elaborating_dies)) { - if (lo_pc < hi_pc) - ranges.Append(DWARFRangeList::Entry(lo_pc, hi_pc - lo_pc)); - } + check_elaborating_dies) && + lo_pc < hi_pc) + return llvm::DWARFAddressRangesVector{{lo_pc, hi_pc}}; } - return ranges; + return llvm::createStringError("DIE has no address range information"); } // GetName @@ -577,13 +571,15 @@ const char *DWARFDebugInfoEntry::GetPubname(const DWARFUnit *cu) const { /// table instead of the compile unit offset. void DWARFDebugInfoEntry::BuildFunctionAddressRangeTable( DWARFUnit *cu, DWARFDebugAranges *debug_aranges) const { + Log *log = GetLog(DWARFLog::DebugInfo); if (m_tag) { if (m_tag == DW_TAG_subprogram) { - DWARFRangeList ranges = - GetAttributeAddressRanges(cu, /*check_hi_lo_pc=*/true); - for (const auto &r : ranges) { - debug_aranges->AppendRange(GetOffset(), r.GetRangeBase(), - r.GetRangeEnd()); + if (llvm::Expected ranges = + GetAttributeAddressRanges(cu, /*check_hi_lo_pc=*/true)) { + for (const auto &r : *ranges) + debug_aranges->AppendRange(GetOffset(), r.LowPC, r.HighPC); + } else { + LLDB_LOG_ERROR(log, ranges.takeError(), "DIE({1:x}): {0}", GetOffset()); } } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h index 0e50aab3292a..de6bbf1d5278 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.h @@ -10,7 +10,6 @@ #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGINFOENTRY_H #include "SymbolFileDWARF.h" -#include "llvm/ADT/SmallVector.h" #include "DWARFAttribute.h" #include "DWARFBaseDIE.h" @@ -20,6 +19,7 @@ #include #include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" namespace lldb_private::plugin { namespace dwarf { @@ -95,7 +95,7 @@ public: dw_addr_t &hi_pc, uint64_t fail_value, bool check_elaborating_dies = false) const; - DWARFRangeList + llvm::Expected GetAttributeAddressRanges(DWARFUnit *cu, bool check_hi_lo_pc, bool check_elaborating_dies = false) const; @@ -106,15 +106,13 @@ public: const char *GetPubname(const DWARFUnit *cu) const; - bool GetDIENamesAndRanges(DWARFUnit *cu, const char *&name, - const char *&mangled, DWARFRangeList &rangeList, - std::optional &decl_file, - std::optional &decl_line, - std::optional &decl_column, - std::optional &call_file, - std::optional &call_line, - std::optional &call_column, - DWARFExpressionList *frame_base = nullptr) const; + bool GetDIENamesAndRanges( + DWARFUnit *cu, const char *&name, const char *&mangled, + llvm::DWARFAddressRangesVector &rangeList, std::optional &decl_file, + std::optional &decl_line, std::optional &decl_column, + std::optional &call_file, std::optional &call_line, + std::optional &call_column, + DWARFExpressionList *frame_base = nullptr) const; const llvm::DWARFAbbreviationDeclaration * GetAbbreviationDeclarationPtr(const DWARFUnit *cu) const; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp index 0c9fd31cbfae..07de23f9de2f 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -1029,9 +1029,8 @@ DWARFUnit::GetStringOffsetSectionItem(uint32_t index) const { return m_dwarf.GetDWARFContext().getOrLoadStrOffsetsData().GetU32(&offset); } -llvm::Expected +llvm::Expected DWARFUnit::FindRnglistFromOffset(dw_offset_t offset) { - llvm::DWARFAddressRangesVector llvm_ranges; if (GetVersion() <= 4) { llvm::DWARFDataExtractor data = m_dwarf.GetDWARFContext().getOrLoadRangesData().GetAsLLVMDWARF(); @@ -1040,48 +1039,38 @@ DWARFUnit::FindRnglistFromOffset(dw_offset_t offset) { llvm::DWARFDebugRangeList list; if (llvm::Error e = list.extract(data, &offset)) return e; - llvm_ranges = list.getAbsoluteRanges( + return list.getAbsoluteRanges( llvm::object::SectionedAddress{GetBaseAddress()}); - } else { - if (!GetRnglistTable()) - return llvm::createStringError(std::errc::invalid_argument, - "missing or invalid range list table"); - - llvm::DWARFDataExtractor data = GetRnglistData().GetAsLLVMDWARF(); - - // As DW_AT_rnglists_base may be missing we need to call setAddressSize. - data.setAddressSize(m_header.getAddressByteSize()); - auto range_list_or_error = GetRnglistTable()->findList(data, offset); - if (!range_list_or_error) - return range_list_or_error.takeError(); - - llvm::Expected expected_llvm_ranges = - range_list_or_error->getAbsoluteRanges( - llvm::object::SectionedAddress{GetBaseAddress()}, - GetAddressByteSize(), [&](uint32_t index) { - uint32_t index_size = GetAddressByteSize(); - dw_offset_t addr_base = GetAddrBase(); - lldb::offset_t offset = - addr_base + static_cast(index) * index_size; - return llvm::object::SectionedAddress{ - m_dwarf.GetDWARFContext().getOrLoadAddrData().GetMaxU64( - &offset, index_size)}; - }); - if (!expected_llvm_ranges) - return expected_llvm_ranges.takeError(); - llvm_ranges = std::move(*expected_llvm_ranges); } - DWARFRangeList ranges; - for (const llvm::DWARFAddressRange &llvm_range : llvm_ranges) { - ranges.Append(DWARFRangeList::Entry(llvm_range.LowPC, - llvm_range.HighPC - llvm_range.LowPC)); - } - ranges.Sort(); - return ranges; + // DWARF >= v5 + if (!GetRnglistTable()) + return llvm::createStringError(std::errc::invalid_argument, + "missing or invalid range list table"); + + llvm::DWARFDataExtractor data = GetRnglistData().GetAsLLVMDWARF(); + + // As DW_AT_rnglists_base may be missing we need to call setAddressSize. + data.setAddressSize(m_header.getAddressByteSize()); + auto range_list_or_error = GetRnglistTable()->findList(data, offset); + if (!range_list_or_error) + return range_list_or_error.takeError(); + + return range_list_or_error->getAbsoluteRanges( + llvm::object::SectionedAddress{GetBaseAddress()}, GetAddressByteSize(), + [&](uint32_t index) { + uint32_t index_size = GetAddressByteSize(); + dw_offset_t addr_base = GetAddrBase(); + lldb::offset_t offset = + addr_base + static_cast(index) * index_size; + return llvm::object::SectionedAddress{ + m_dwarf.GetDWARFContext().getOrLoadAddrData().GetMaxU64( + &offset, index_size)}; + }); } -llvm::Expected DWARFUnit::FindRnglistFromIndex(uint32_t index) { +llvm::Expected +DWARFUnit::FindRnglistFromIndex(uint32_t index) { llvm::Expected maybe_offset = GetRnglistOffset(index); if (!maybe_offset) return maybe_offset.takeError(); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h index 1267e20f0871..0a0019c25836 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h @@ -13,6 +13,7 @@ #include "DWARFDebugInfoEntry.h" #include "lldb/Utility/XcodeSDK.h" #include "lldb/lldb-enumerations.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRnglists.h" #include "llvm/Support/RWMutex.h" @@ -213,12 +214,14 @@ public: /// Return a list of address ranges resulting from a (possibly encoded) /// range list starting at a given offset in the appropriate ranges section. - llvm::Expected FindRnglistFromOffset(dw_offset_t offset); + llvm::Expected + FindRnglistFromOffset(dw_offset_t offset); /// Return a list of address ranges retrieved from an encoded range /// list whose offset is found via a table lookup given an index (DWARF v5 /// and later). - llvm::Expected FindRnglistFromIndex(uint32_t index); + llvm::Expected + FindRnglistFromIndex(uint32_t index); /// Return a rangelist's offset based on an index. The index designates /// an entry in the rangelist table's offset array and is supplied by diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index b2128a34d837..68e50902d641 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -7,7 +7,8 @@ //===----------------------------------------------------------------------===// #include "SymbolFileDWARF.h" - +#include "llvm/ADT/STLExtras.h" +#include "llvm/DebugInfo/DWARF/DWARFAddressRange.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h" #include "llvm/DebugInfo/DWARF/DWARFTypePrinter.h" #include "llvm/Support/Casting.h" @@ -889,13 +890,13 @@ CompUnitSP SymbolFileDWARF::ParseCompileUnitAtIndex(uint32_t cu_idx) { Function *SymbolFileDWARF::ParseFunction(CompileUnit &comp_unit, const DWARFDIE &die) { ASSERT_MODULE_LOCK(this); + Log *log = GetLog(LLDBLog::Symbols); if (!die.IsValid()) return nullptr; auto type_system_or_err = GetTypeSystemForLanguage(GetLanguage(*die.GetCU())); if (auto err = type_system_or_err.takeError()) { - LLDB_LOG_ERROR(GetLog(LLDBLog::Symbols), std::move(err), - "Unable to parse function: {0}"); + LLDB_LOG_ERROR(log, std::move(err), "Unable to parse function: {0}"); return nullptr; } auto ts = *type_system_or_err; @@ -907,13 +908,18 @@ Function *SymbolFileDWARF::ParseFunction(CompileUnit &comp_unit, AddressRanges ranges; ModuleSP module_sp(die.GetModule()); - for (const auto &range : die.GetDIE()->GetAttributeAddressRanges( - die.GetCU(), /*check_hi_lo_pc=*/true)) { - if (range.base < m_first_code_address) - continue; - if (Address base_addr(range.base, module_sp->GetSectionList()); - base_addr.IsValid() && FixupAddress(base_addr)) - ranges.emplace_back(std::move(base_addr), range.size); + if (llvm::Expected die_ranges = + die.GetDIE()->GetAttributeAddressRanges(die.GetCU(), + /*check_hi_lo_pc=*/true)) { + for (const auto &range : *die_ranges) { + if (range.valid() && range.LowPC < m_first_code_address) + continue; + if (Address base_addr(range.LowPC, module_sp->GetSectionList()); + base_addr.IsValid() && FixupAddress(base_addr)) + ranges.emplace_back(std::move(base_addr), range.HighPC - range.LowPC); + } + } else { + LLDB_LOG_ERROR(log, die_ranges.takeError(), "DIE({1:x}): {0}", die.GetID()); } if (ranges.empty()) return nullptr; @@ -1317,7 +1323,7 @@ size_t SymbolFileDWARF::ParseBlocksRecursive(CompileUnit &comp_unit, continue; Block *block = parent_block->CreateChild(die.GetID()).get(); - DWARFRangeList ranges; + llvm::DWARFAddressRangesVector ranges; const char *name = nullptr; const char *mangled_name = nullptr; @@ -1330,21 +1336,19 @@ size_t SymbolFileDWARF::ParseBlocksRecursive(CompileUnit &comp_unit, if (die.GetDIENamesAndRanges(name, mangled_name, ranges, decl_file, decl_line, decl_column, call_file, call_line, call_column, nullptr)) { - const size_t num_ranges = ranges.GetSize(); - for (size_t i = 0; i < num_ranges; ++i) { - const DWARFRangeList::Entry &range = ranges.GetEntryRef(i); - const addr_t range_base = range.GetRangeBase(); - if (range_base >= subprogram_low_pc) - block->AddRange(Block::Range(range_base - subprogram_low_pc, - range.GetByteSize())); + for (const llvm::DWARFAddressRange &range : ranges) { + if (!range.valid()) + continue; + if (range.LowPC >= subprogram_low_pc) + block->AddRange(Block::Range(range.LowPC - subprogram_low_pc, + range.HighPC - range.LowPC)); else { GetObjectFile()->GetModule()->ReportError( "{0:x8}: adding range [{1:x16}-{2:x16}) which has a base " "that is less than the function's low PC {3:x16}. Please file " "a bug and attach the file at the " "start of this error message", - block->GetID(), range_base, range.GetRangeEnd(), - subprogram_low_pc); + block->GetID(), range.LowPC, range.HighPC, subprogram_low_pc); } } block->FinalizeRanges(); @@ -3196,14 +3200,21 @@ size_t SymbolFileDWARF::ParseBlocksRecursive(Function &func) { if (function_die) { // We can't use the file address from the Function object as (in the OSO // case) it will already be remapped to the main module. - DWARFRangeList ranges = function_die.GetDIE()->GetAttributeAddressRanges( - function_die.GetCU(), - /*check_hi_lo_pc=*/true); - lldb::addr_t function_file_addr = - ranges.GetMinRangeBase(LLDB_INVALID_ADDRESS); - if (function_file_addr != LLDB_INVALID_ADDRESS) - ParseBlocksRecursive(*comp_unit, &func.GetBlock(false), - function_die.GetFirstChild(), function_file_addr); + if (llvm::Expected ranges = + function_die.GetDIE()->GetAttributeAddressRanges( + function_die.GetCU(), + /*check_hi_lo_pc=*/true)) { + if (ranges->empty()) + return 0; + // TODO: Use the first range instead. + dw_addr_t function_file_addr = llvm::min_element(*ranges)->LowPC; + if (function_file_addr != LLDB_INVALID_ADDRESS) + ParseBlocksRecursive(*comp_unit, &func.GetBlock(false), + function_die.GetFirstChild(), function_file_addr); + } else { + LLDB_LOG_ERROR(GetLog(DWARFLog::DebugInfo), ranges.takeError(), + "{1:x}: {0}", dwarf_cu->GetOffset()); + } } return functions_added; @@ -3232,10 +3243,16 @@ size_t SymbolFileDWARF::ParseVariablesForContext(const SymbolContext &sc) { DWARFDIE function_die = GetDIE(sc.function->GetID()); dw_addr_t func_lo_pc = LLDB_INVALID_ADDRESS; - DWARFRangeList ranges = function_die.GetDIE()->GetAttributeAddressRanges( - function_die.GetCU(), /*check_hi_lo_pc=*/true); - if (!ranges.IsEmpty()) - func_lo_pc = ranges.GetMinRangeBase(0); + if (llvm::Expected ranges = + function_die.GetDIE()->GetAttributeAddressRanges( + function_die.GetCU(), /*check_hi_lo_pc=*/true)) { + // TODO: Use the first range element instead. + if (!ranges->empty()) + func_lo_pc = llvm::min_element(*ranges)->LowPC; + } else { + LLDB_LOG_ERROR(GetLog(DWARFLog::DebugInfo), ranges.takeError(), + "DIE({1:x}): {0}", function_die.GetID()); + } if (func_lo_pc != LLDB_INVALID_ADDRESS) { const size_t num_variables = ParseVariablesInFunctionContext(sc, function_die, func_lo_pc); -- cgit v1.2.3 From ea8e328ae2bea9d9a7d556ef4d791fa116f7de18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20Umann?= Date: Fri, 13 Dec 2024 14:31:06 +0100 Subject: [analyzer][Z3] Restore the original timeout of 15s (#118291) Discussion here: https://discourse.llvm.org/t/analyzer-rfc-taming-z3-query-times/79520/15?u=szelethus The original patch, #97298 introduced new timeouts backed by thorough testing and measurements to keep the running time of Z3 within reasonable limits. The measurements also showed that only certain reports and certain TUs were responsible for the poor performance of Z3 refutation. Unfortunately, it seems like that on machines with different characteristics (slower machines) the current timeouts don't just axe 0.01% of reports, but many more as well. Considering that timeouts are inherently nondeterministic as a cutoff point, this lead reports sets being vastly different on the same projects with the same configuration. The discussion link shows that all configurations introduced in the patch with their default values lead to severa nondeterminism of the analyzer. As we, and others use the analyzer as a gating tool for PRs, we should revert to the original defaults. We should respect that * There are still parts of the analyzer that are either proven or suspected to contain nondeterministic code (like pointer sets), * A 15s timeout is more likely to hit the same reports every time on a wider range of machines, but is still inherently nondeterministic, but an infinite timeout leads to the tool hanging, * If you measure the performance of the analyzer on your machines, you can and should achieve some speedup with little or no observable nondeterminism. --------- Co-authored-by: Balazs Benics --- .../clang/StaticAnalyzer/Core/AnalyzerOptions.def | 19 +++- clang/test/Analysis/analyzer-config.c | 6 +- .../StaticAnalyzer/Z3CrosscheckOracleTest.cpp | 105 +++++++++++++++++---- 3 files changed, 105 insertions(+), 25 deletions(-) diff --git a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def index ad2dbffe8832..d8a7c755c959 100644 --- a/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def +++ b/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def @@ -189,20 +189,29 @@ ANALYZER_OPTION( "crosscheck-with-z3-eqclass-timeout-threshold", "Set a timeout for bug report equivalence classes in milliseconds. " "If we exhaust this threshold, we will drop the bug report eqclass " - "instead of doing more Z3 queries. Set 0 for no timeout.", 700) + "instead of doing more Z3 queries. Setting this to 700 ms in conjunction " + "with \"crosscheck-with-z3-timeout-threshold\" of 300 ms, would nicely " + "guarantee that no bug report equivalence class can take longer than " + "1 second, effectively mitigating Z3 hangs during refutation. " + "Set 0 for no timeout.", 0) ANALYZER_OPTION( unsigned, Z3CrosscheckTimeoutThreshold, "crosscheck-with-z3-timeout-threshold", "Set a timeout for individual Z3 queries in milliseconds. " - "Set 0 for no timeout.", 300) + "On fast machines, 300 worked well in some cases. " + "The lower it is, the higher the chances of having flaky issues. " + "Having no timeout may hang the analyzer indefinitely. " + "Set 0 for no timeout.", 15'000) ANALYZER_OPTION( unsigned, Z3CrosscheckRLimitThreshold, "crosscheck-with-z3-rlimit-threshold", - "Set the Z3 resource limit threshold. This sets a deterministic cutoff " - "point for Z3 queries, as longer queries usually consume more resources. " - "Set 0 for unlimited.", 400'000) + "Set the Z3 resource limit threshold. This sets a supposedly deterministic " + "cutoff point for Z3 queries, as longer queries usually consume more " + "resources. " + "400'000 should on average make Z3 queries run for up to 100ms on modern " + "hardware. Set 0 for unlimited.", 0) ANALYZER_OPTION(bool, ShouldReportIssuesInMainSourceFile, "report-in-main-source-file", diff --git a/clang/test/Analysis/analyzer-config.c b/clang/test/Analysis/analyzer-config.c index 47594e8317bc..8ce6184144d4 100644 --- a/clang/test/Analysis/analyzer-config.c +++ b/clang/test/Analysis/analyzer-config.c @@ -40,9 +40,9 @@ // CHECK-NEXT: cplusplus.Move:WarnOn = KnownsAndLocals // CHECK-NEXT: cplusplus.SmartPtrModeling:ModelSmartPtrDereference = false // CHECK-NEXT: crosscheck-with-z3 = false -// CHECK-NEXT: crosscheck-with-z3-eqclass-timeout-threshold = 700 -// CHECK-NEXT: crosscheck-with-z3-rlimit-threshold = 400000 -// CHECK-NEXT: crosscheck-with-z3-timeout-threshold = 300 +// CHECK-NEXT: crosscheck-with-z3-eqclass-timeout-threshold = 0 +// CHECK-NEXT: crosscheck-with-z3-rlimit-threshold = 0 +// CHECK-NEXT: crosscheck-with-z3-timeout-threshold = 15000 // CHECK-NEXT: ctu-dir = "" // CHECK-NEXT: ctu-import-cpp-threshold = 8 // CHECK-NEXT: ctu-import-threshold = 24 diff --git a/clang/unittests/StaticAnalyzer/Z3CrosscheckOracleTest.cpp b/clang/unittests/StaticAnalyzer/Z3CrosscheckOracleTest.cpp index ef07e47ee911..626f5c163d17 100644 --- a/clang/unittests/StaticAnalyzer/Z3CrosscheckOracleTest.cpp +++ b/clang/unittests/StaticAnalyzer/Z3CrosscheckOracleTest.cpp @@ -38,8 +38,8 @@ static const AnalyzerOptions DefaultOpts = [] { // Remember to update the tests in this file when these values change. // Also update the doc comment of `interpretQueryResult`. - assert(Config.Z3CrosscheckRLimitThreshold == 400'000); - assert(Config.Z3CrosscheckTimeoutThreshold == 300_ms); + assert(Config.Z3CrosscheckRLimitThreshold == 0); + assert(Config.Z3CrosscheckTimeoutThreshold == 15'000_ms); // Usually, when the timeout/rlimit threshold is reached, Z3 only slightly // overshoots until it realizes that it overshoot and needs to back off. // Consequently, the measured timeout should be fairly close to the threshold. @@ -47,8 +47,17 @@ static const AnalyzerOptions DefaultOpts = [] { return Config; }(); +static const AnalyzerOptions LimitedOpts = [] { + AnalyzerOptions Config = DefaultOpts; + Config.Z3CrosscheckEQClassTimeoutThreshold = 700_ms; + Config.Z3CrosscheckTimeoutThreshold = 300_step; + Config.Z3CrosscheckRLimitThreshold = 400'000_step; + return Config; +}(); + namespace { +template class Z3CrosscheckOracleTest : public testing::Test { public: Z3Decision interpretQueryResult(const Z3Result &Result) { @@ -56,58 +65,100 @@ public: } private: - Z3CrosscheckOracle Oracle = Z3CrosscheckOracle(DefaultOpts); + Z3CrosscheckOracle Oracle = Z3CrosscheckOracle(Opts); }; -TEST_F(Z3CrosscheckOracleTest, AcceptsFirstSAT) { +using DefaultZ3CrosscheckOracleTest = Z3CrosscheckOracleTest; +using LimitedZ3CrosscheckOracleTest = Z3CrosscheckOracleTest; + +TEST_F(DefaultZ3CrosscheckOracleTest, AcceptsFirstSAT) { + ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 25_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, AcceptsFirstSAT) { ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 25_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, AcceptsSAT) { +TEST_F(DefaultZ3CrosscheckOracleTest, AcceptsSAT) { + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); + ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 25_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, AcceptsSAT) { ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 25_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, SATWhenItGoesOverTime) { +TEST_F(DefaultZ3CrosscheckOracleTest, SATWhenItGoesOverTime) { + // Even if it times out, if it is SAT, we should accept it. + ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 15'010_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, SATWhenItGoesOverTime) { // Even if it times out, if it is SAT, we should accept it. ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 310_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, UNSATWhenItGoesOverTime) { +TEST_F(DefaultZ3CrosscheckOracleTest, UNSATWhenItGoesOverTime) { + ASSERT_EQ(RejectEQClass, interpretQueryResult({UNSAT, 15'010_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, UNSATWhenItGoesOverTime) { ASSERT_EQ(RejectEQClass, interpretQueryResult({UNSAT, 310_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, RejectsTimeout) { +TEST_F(DefaultZ3CrosscheckOracleTest, RejectsTimeout) { + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); + ASSERT_EQ(RejectEQClass, interpretQueryResult({UNDEF, 15'010_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, RejectsTimeout) { ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectEQClass, interpretQueryResult({UNDEF, 310_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, RejectsUNSATs) { +TEST_F(DefaultZ3CrosscheckOracleTest, RejectsUNSATs) { + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, RejectsUNSATs) { ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); } -// Testing cut heuristics: -// ======================= +// Testing cut heuristics of the two configurations: +// ================================================= -TEST_F(Z3CrosscheckOracleTest, RejectEQClassIfSpendsTooMuchTotalTime) { +TEST_F(DefaultZ3CrosscheckOracleTest, RejectEQClassIfSpendsTooMuchTotalTime) { + // Simulate long queries, that barely doesn't trigger the timeout. + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 14'990_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 14'990_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 14'990_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, RejectEQClassIfSpendsTooMuchTotalTime) { // Simulate long queries, that barely doesn't trigger the timeout. ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 290_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 290_ms, 1000_step})); ASSERT_EQ(RejectEQClass, interpretQueryResult({UNSAT, 290_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, SATWhenItSpendsTooMuchTotalTime) { +TEST_F(DefaultZ3CrosscheckOracleTest, SATWhenItSpendsTooMuchTotalTime) { + // Simulate long queries, that barely doesn't trigger the timeout. + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 14'990_ms, 1000_step})); + ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 14'990_ms, 1000_step})); + ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 14'990_ms, 1000_step})); +} +TEST_F(LimitedZ3CrosscheckOracleTest, SATWhenItSpendsTooMuchTotalTime) { // Simulate long queries, that barely doesn't trigger the timeout. ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 290_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 290_ms, 1000_step})); ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 290_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, RejectEQClassIfAttemptsManySmallQueries) { +// Z3CrosscheckEQClassTimeoutThreshold is disabled in default configuration, so +// it doesn't make sense to test that. +TEST_F(LimitedZ3CrosscheckOracleTest, RejectEQClassIfAttemptsManySmallQueries) { // Simulate quick, but many queries: 35 quick UNSAT queries. // 35*20ms = 700ms, which is equal to the 700ms threshold. for (int i = 0; i < 35; ++i) { @@ -117,7 +168,9 @@ TEST_F(Z3CrosscheckOracleTest, RejectEQClassIfAttemptsManySmallQueries) { ASSERT_EQ(RejectEQClass, interpretQueryResult({UNSAT, 1_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, SATWhenIfAttemptsManySmallQueries) { +// Z3CrosscheckEQClassTimeoutThreshold is disabled in default configuration, so +// it doesn't make sense to test that. +TEST_F(LimitedZ3CrosscheckOracleTest, SATWhenItAttemptsManySmallQueries) { // Simulate quick, but many queries: 35 quick UNSAT queries. // 35*20ms = 700ms, which is equal to the 700ms threshold. for (int i = 0; i < 35; ++i) { @@ -128,16 +181,34 @@ TEST_F(Z3CrosscheckOracleTest, SATWhenIfAttemptsManySmallQueries) { ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 200_ms, 1000_step})); } -TEST_F(Z3CrosscheckOracleTest, RejectEQClassIfExhaustsRLimit) { +// Z3CrosscheckRLimitThreshold is disabled in default configuration, so it +// doesn't make sense to test that. +TEST_F(LimitedZ3CrosscheckOracleTest, RejectEQClassIfExhaustsRLimit) { ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectEQClass, interpretQueryResult({UNDEF, 25_ms, 405'000_step})); } -TEST_F(Z3CrosscheckOracleTest, SATWhenItExhaustsRLimit) { +// Z3CrosscheckRLimitThreshold is disabled in default configuration, so it +// doesn't make sense to test that. +TEST_F(LimitedZ3CrosscheckOracleTest, SATWhenItExhaustsRLimit) { ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(RejectReport, interpretQueryResult({UNSAT, 25_ms, 1000_step})); ASSERT_EQ(AcceptReport, interpretQueryResult({SAT, 25_ms, 405'000_step})); } +// Demonstrate the weaknesses of the default configuration: +// ======================================================== + +TEST_F(DefaultZ3CrosscheckOracleTest, ManySlowQueriesHangTheAnalyzer) { + // Simulate many slow queries: 250 slow UNSAT queries. + // 250*14000ms = 3500s, ~1 hour. Since we disabled the total time limitation, + // this eqclass would take roughly 1 hour to process. + // It doesn't matter what rlimit the queries consume. + for (int i = 0; i < 250; ++i) { + ASSERT_EQ(RejectReport, + interpretQueryResult({UNSAT, 14'000_ms, 1'000'000_step})); + } +} + } // namespace -- cgit v1.2.3 From 75e6d0eb4d6ad1b58e5eb5c4d25371e6062cee44 Mon Sep 17 00:00:00 2001 From: Mats Petersson Date: Fri, 13 Dec 2024 14:05:48 +0000 Subject: [flang][OpenMP]Add support for OpenMP ERROR directive (#119582) Lowering leads to a TODO, with a test to confirm. Also testing unparse. --------- Co-authored-by: Krzysztof Parzyszek --- .../FlangOmpReport/FlangOmpReportVisitor.cpp | 4 +++ flang/include/flang/Parser/dump-parse-tree.h | 6 ++++ flang/include/flang/Parser/parse-tree.h | 32 +++++++++++++++++++++- flang/lib/Lower/OpenMP/OpenMP.cpp | 7 +++++ flang/lib/Parser/openmp-parsers.cpp | 20 ++++++++++++++ flang/lib/Parser/unparse.cpp | 11 ++++++++ flang/lib/Semantics/check-omp-structure.cpp | 9 ++++++ flang/lib/Semantics/check-omp-structure.h | 2 ++ flang/test/Lower/OpenMP/Todo/error.f90 | 7 +++++ flang/test/Parser/OpenMP/error-unparse.f90 | 23 ++++++++++++++++ llvm/include/llvm/Frontend/OpenMP/OMP.td | 3 ++ 11 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 flang/test/Lower/OpenMP/Todo/error.f90 create mode 100644 flang/test/Parser/OpenMP/error-unparse.f90 diff --git a/flang/examples/FlangOmpReport/FlangOmpReportVisitor.cpp b/flang/examples/FlangOmpReport/FlangOmpReportVisitor.cpp index 2dc480f0c901..665b92be0089 100644 --- a/flang/examples/FlangOmpReport/FlangOmpReportVisitor.cpp +++ b/flang/examples/FlangOmpReport/FlangOmpReportVisitor.cpp @@ -143,6 +143,10 @@ std::string OpenMPCounterVisitor::getName(const OpenMPConstruct &c) { }, c.u); }, + [&](const OpenMPErrorConstruct &c) -> std::string { + const CharBlock &source{std::get<0>(c.t).source}; + return normalize_construct_name(source.ToString()); + }, [&](const OpenMPSectionConstruct &c) -> std::string { return "section"; }, diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h index 7c0f04091362..940caaeea9c3 100644 --- a/flang/include/flang/Parser/dump-parse-tree.h +++ b/flang/include/flang/Parser/dump-parse-tree.h @@ -488,6 +488,9 @@ public: NODE(parser, OmpAlignment) NODE(parser, OmpAlignedClause) NODE(OmpAlignedClause, Modifier) + NODE(parser, OmpAtClause) + NODE_ENUM(OmpAtClause, ActionTime) + NODE_ENUM(OmpSeverityClause, Severity) NODE(parser, OmpAtomic) NODE(parser, OmpAtomicCapture) NODE(OmpAtomicCapture, Stmt1) @@ -566,6 +569,7 @@ public: NODE(parser, OmpStepSimpleModifier) NODE(parser, OmpLoopDirective) NODE(parser, OmpMapClause) + NODE(parser, OmpMessageClause) NODE(OmpMapClause, Modifier) static std::string GetNodeName(const llvm::omp::Clause &x) { return llvm::Twine( @@ -609,6 +613,7 @@ public: NODE(parser, OmpScheduleClause) NODE(OmpScheduleClause, Modifier) NODE_ENUM(OmpScheduleClause, Kind) + NODE(parser, OmpSeverityClause) NODE(parser, OmpDeviceClause) NODE(OmpDeviceClause, Modifier) NODE(parser, OmpDeviceModifier) @@ -657,6 +662,7 @@ public: NODE(parser, OmpAtomicDefaultMemOrderClause) NODE_ENUM(common, OmpAtomicDefaultMemOrderType) NODE(parser, OpenMPDepobjConstruct) + NODE(parser, OpenMPErrorConstruct) NODE(parser, OpenMPFlushConstruct) NODE(parser, OpenMPLoopConstruct) NODE(parser, OpenMPExecutableAllocate) diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h index 8086c3103101..1d97126d17db 100644 --- a/flang/include/flang/Parser/parse-tree.h +++ b/flang/include/flang/Parser/parse-tree.h @@ -3778,6 +3778,13 @@ struct OmpAllocateClause { std::tuple t; }; +// Ref: [5.2:216-217 (sort of, as it's only mentioned in passing) +// AT(compilation|execution) +struct OmpAtClause { + ENUM_CLASS(ActionTime, Compilation, Execution); + WRAPPER_CLASS_BOILERPLATE(OmpAtClause, ActionTime); +}; + // Ref: [5.0:60-63], [5.1:83-86], [5.2:210-213] // // atomic-default-mem-order-clause -> @@ -4028,6 +4035,13 @@ struct OmpMapClause { std::tuple t; }; +// Ref: [5.2:217-218] +// message-clause -> +// MESSAGE("message-text") +struct OmpMessageClause { + WRAPPER_CLASS_BOILERPLATE(OmpMessageClause, Expr); +}; + // Ref: [4.5:87-91], [5.0:140-146], [5.1:166-171], [5.2:270] // // num-tasks-clause -> @@ -4090,6 +4104,14 @@ struct OmpScheduleClause { std::tuple> t; }; +// REF: [5.2:217] +// severity-clause -> +// SEVERITY(warning|fatal) +struct OmpSeverityClause { + ENUM_CLASS(Severity, Fatal, Warning); + WRAPPER_CLASS_BOILERPLATE(OmpSeverityClause, Severity); +}; + // Ref: [5.0:232-234], [5.1:264-266], [5.2:137] // // task-reduction-clause -> @@ -4476,6 +4498,14 @@ struct OpenMPDepobjConstruct { std::tuple t; }; +// Ref: OpenMP [5.2:216-218] +// ERROR AT(compilation|execution) SEVERITY(fatal|warning) MESSAGE("msg-str) +struct OpenMPErrorConstruct { + TUPLE_CLASS_BOILERPLATE(OpenMPErrorConstruct); + CharBlock source; + std::tuple t; +}; + // 2.17.8 flush -> FLUSH [memory-order-clause] [(variable-name-list)] struct OpenMPFlushConstruct { TUPLE_CLASS_BOILERPLATE(OpenMPFlushConstruct); @@ -4548,7 +4578,7 @@ struct OpenMPConstruct { UNION_CLASS_BOILERPLATE(OpenMPConstruct); std::variant u; diff --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp index f30d2687682c..c61ab67d95a9 100644 --- a/flang/lib/Lower/OpenMP/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP/OpenMP.cpp @@ -2911,6 +2911,13 @@ static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, queue.begin(), name); } +static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, + semantics::SemanticsContext &semaCtx, + lower::pft::Evaluation &eval, + const parser::OpenMPErrorConstruct &) { + TODO(converter.getCurrentLocation(), "OpenMPErrorConstruct"); +} + static void genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable, semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval, diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp index 791fee3507b4..67385c03f66c 100644 --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -567,6 +567,16 @@ TYPE_PARSER(construct( "TEAMS" >> pure(OmpBindClause::Binding::Teams) || "THREAD" >> pure(OmpBindClause::Binding::Thread))) +TYPE_PARSER(construct( + "EXECUTION" >> pure(OmpAtClause::ActionTime::Execution) || + "COMPILATION" >> pure(OmpAtClause::ActionTime::Compilation))) + +TYPE_PARSER(construct( + "FATAL" >> pure(OmpSeverityClause::Severity::Fatal) || + "WARNING" >> pure(OmpSeverityClause::Severity::Warning))) + +TYPE_PARSER(construct(expr)) + TYPE_PARSER( "ACQUIRE" >> construct(construct()) || "ACQ_REL" >> construct(construct()) || @@ -578,6 +588,8 @@ TYPE_PARSER( parenthesized(Parser{}))) || "ALLOCATOR" >> construct(construct( parenthesized(scalarIntExpr))) || + "AT" >> construct(construct( + parenthesized(Parser{}))) || "ATOMIC_DEFAULT_MEM_ORDER" >> construct(construct( parenthesized(Parser{}))) || @@ -645,6 +657,8 @@ TYPE_PARSER( "MAP" >> construct(construct( parenthesized(Parser{}))) || "MERGEABLE" >> construct(construct()) || + "MESSAGE" >> construct(construct( + parenthesized(Parser{}))) || "NOGROUP" >> construct(construct()) || "NONTEMPORAL" >> construct(construct( parenthesized(nonemptyList(name)))) || @@ -688,6 +702,8 @@ TYPE_PARSER( "SCHEDULE" >> construct(construct( parenthesized(Parser{}))) || "SEQ_CST" >> construct(construct()) || + "SEVERITY" >> construct(construct( + parenthesized(Parser{}))) || "SHARED" >> construct(construct( parenthesized(Parser{}))) || "SIMD"_id >> construct(construct()) || @@ -1011,6 +1027,9 @@ TYPE_PARSER(sourced(construct(verbatim("CRITICAL"_tok), TYPE_PARSER(construct( Parser{}, block, Parser{})) +TYPE_PARSER(sourced(construct( + verbatim("ERROR"_tok), Parser{}))) + // 2.11.3 Executable Allocate directive TYPE_PARSER( sourced(construct(verbatim("ALLOCATE"_tok), @@ -1108,6 +1127,7 @@ TYPE_CONTEXT_PARSER("OpenMP construct"_en_US, // OpenMPStandaloneConstruct to resolve !$OMP ORDERED construct(Parser{}), construct(Parser{}), + construct(Parser{}), construct(Parser{}), construct(Parser{}), construct(Parser{}), diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp index 4b8e2624e36c..0a6af7435b4a 100644 --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2706,6 +2706,15 @@ public: Put(")\n"); EndOpenMP(); } + bool Pre(const OmpMessageClause &x) { + Walk(x.v); + return false; + } + void Unparse(const OpenMPErrorConstruct &x) { + Word("!$OMP ERROR "); + Walk(x.t); + Put("\n"); + } void Unparse(const OmpSectionsDirective &x) { switch (x.v) { case llvm::omp::Directive::OMPD_sections: @@ -2896,6 +2905,7 @@ public: WALK_NESTED_ENUM(InquireSpec::LogVar, Kind) WALK_NESTED_ENUM(ProcedureStmt, Kind) // R1506 WALK_NESTED_ENUM(UseStmt, ModuleNature) // R1410 + WALK_NESTED_ENUM(OmpAtClause, ActionTime) // OMP at WALK_NESTED_ENUM(OmpBindClause, Binding) // OMP bind WALK_NESTED_ENUM(OmpProcBindClause, AffinityPolicy) // OMP proc_bind WALK_NESTED_ENUM(OmpDefaultClause, DataSharingAttribute) // OMP default @@ -2907,6 +2917,7 @@ public: WALK_NESTED_ENUM(OmpOrderingModifier, Value) // OMP ordering-modifier WALK_NESTED_ENUM(OmpTaskDependenceType, Value) // OMP task-dependence-type WALK_NESTED_ENUM(OmpScheduleClause, Kind) // OMP schedule-kind + WALK_NESTED_ENUM(OmpSeverityClause, Severity) // OMP severity WALK_NESTED_ENUM(OmpDeviceModifier, Value) // OMP device modifier WALK_NESTED_ENUM( OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 3b2033de4554..414753305a6e 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -1690,6 +1690,15 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) { dirContext_.pop_back(); } +void OmpStructureChecker::Enter(const parser::OpenMPErrorConstruct &x) { + const auto &dir{std::get(x.t)}; + PushContextAndClauseSets(dir.source, llvm::omp::Directive::OMPD_error); +} + +void OmpStructureChecker::Leave(const parser::OpenMPErrorConstruct &x) { + dirContext_.pop_back(); +} + void OmpStructureChecker::Enter(const parser::OpenMPExecutableAllocate &x) { isPredefinedAllocator = true; const auto &dir{std::get(x.t)}; diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h index f3592b2160fa..346a7bed9138 100644 --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -102,6 +102,8 @@ public: void Enter(const parser::OmpDeclareTargetWithList &); void Enter(const parser::OmpDeclareTargetWithClause &); void Leave(const parser::OmpDeclareTargetWithClause &); + void Enter(const parser::OpenMPErrorConstruct &); + void Leave(const parser::OpenMPErrorConstruct &); void Enter(const parser::OpenMPExecutableAllocate &); void Leave(const parser::OpenMPExecutableAllocate &); void Enter(const parser::OpenMPAllocatorsConstruct &); diff --git a/flang/test/Lower/OpenMP/Todo/error.f90 b/flang/test/Lower/OpenMP/Todo/error.f90 new file mode 100644 index 000000000000..b97e2c20a0cd --- /dev/null +++ b/flang/test/Lower/OpenMP/Todo/error.f90 @@ -0,0 +1,7 @@ +! RUN: %not_todo_cmd %flang_fc1 -emit-fir -fopenmp -fopenmp-version=51 -o - %s 2>&1 | FileCheck %s + +! CHECK: not yet implemented: OpenMPErrorConstruct +program p + integer, allocatable :: x + !$omp error at(compilation) severity(warning) message("an error") +end program p diff --git a/flang/test/Parser/OpenMP/error-unparse.f90 b/flang/test/Parser/OpenMP/error-unparse.f90 new file mode 100644 index 000000000000..fce5d8cf2286 --- /dev/null +++ b/flang/test/Parser/OpenMP/error-unparse.f90 @@ -0,0 +1,23 @@ +! RUN: %flang_fc1 -fopenmp-version=51 -fopenmp -fdebug-unparse-no-sema %s 2>&1 | FileCheck %s +! RUN: %flang_fc1 -fopenmp-version=51 -fopenmp -fdebug-dump-parse-tree-no-sema %s 2>&1 | FileCheck %s --check-prefix="PARSE-TREE" +program main + character(*), parameter :: message = "This is an error" + !CHECK: !$OMP ERROR AT(COMPILATION) SEVERITY(WARNING) MESSAGE("some message here") + !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPErrorConstruct + !PARSE-TREE: OmpClauseList -> OmpClause -> At -> OmpAtClause -> ActionTime = Compilation + !PARSE-TREE: OmpClause -> Severity -> OmpSeverityClause -> Severity = Warning + !PARSE-TREE: OmpClause -> Message -> OmpMessageClause -> Expr -> LiteralConstant -> CharLiteralConstant + !$omp error at(compilation) severity(warning) message("some message here") + !CHECK: !$OMP ERROR AT(COMPILATION) SEVERITY(FATAL) MESSAGE(message) + !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPErrorConstruct + !PARSE-TREE: OmpClauseList -> OmpClause -> At -> OmpAtClause -> ActionTime = Compilation + !PARSE-TREE: OmpClause -> Severity -> OmpSeverityClause -> Severity = Fatal + !PARSE-TREE: OmpClause -> Message -> OmpMessageClause -> Expr -> Designator -> DataRef -> Name = 'message' + !$omp error at(compilation) severity(fatal) message(message) + !CHECK: !$OMP ERROR AT(EXECUTION) SEVERITY(FATAL) MESSAGE(message) + !PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPErrorConstruct + !PARSE-TREE: OmpClauseList -> OmpClause -> At -> OmpAtClause -> ActionTime = Execution + !PARSE-TREE: OmpClause -> Severity -> OmpSeverityClause -> Severity = Fatal + !PARSE-TREE: OmpClause -> Message -> OmpMessageClause -> Expr -> Designator -> DataRef -> Name = 'message' + !$omp error at(EXECUTION) severity(fatal) message(message) +end program main diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td index 6d04ee21ab50..e36eb77cefe7 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -66,6 +66,7 @@ def OMPC_AppendArgs : Clause<"append_args"> { } def OMPC_At : Clause<"at"> { let clangClass = "OMPAtClause"; + let flangClass = "OmpAtClause"; } def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> { let clangClass = "OMPAtomicDefaultMemOrderClause"; @@ -288,6 +289,7 @@ def OMPC_Mergeable : Clause<"mergeable"> { } def OMPC_Message : Clause<"message"> { let clangClass = "OMPMessageClause"; + let flangClass = "OmpMessageClause"; } def OMPC_NoOpenMP : Clause<"no_openmp"> { let clangClass = "OMPNoOpenMPClause"; @@ -445,6 +447,7 @@ def OMPC_SeqCst : Clause<"seq_cst"> { } def OMPC_Severity : Clause<"severity"> { let clangClass = "OMPSeverityClause"; + let flangClass = "OmpSeverityClause"; } def OMPC_Shared : Clause<"shared"> { let clangClass = "OMPSharedClause"; -- cgit v1.2.3 From c2172431c72c9b249bf5bdfcc0c239fbfe64fa9b Mon Sep 17 00:00:00 2001 From: Momchil Velikov Date: Fri, 13 Dec 2024 14:06:54 +0000 Subject: [AArch64] Implements FP8 SVE intrinsics for dot-product (#118125) This patch adds the following intrinsics: * 8-bit floating-point dot product to single-precision. // Only if (__ARM_FEATURE_SVE2 && __ARM_FEATURE_FP8DOT4) || __ARM_FEATURE_SSVE_FP8DOT4 svfloat32_t svdot[_f32_mf8]_fpm(svfloat32_t zda, svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm); svfloat32_t svdot[_n_f32_mf8]_fpm(svfloat32_t zda, svmfloat8_t zn, mfloat8_t zm, fpm_t fpm); * 8-bit floating-point indexed dot product to single-precision. // Only if (__ARM_FEATURE_SVE2 && __ARM_FEATURE_FP8DOT4) || __ARM_FEATURE_SSVE_FP8DOT4 svfloat32_t svdot_lane[_f32_mf8]_fpm(svfloat32_t zda, svmfloat8_t zn, svmfloat8_t zm, uint64_t imm0_3, fpm_t fpm); * 8-bit floating-point dot product to half-precision. // Only if (__ARM_FEATURE_SVE2 && __ARM_FEATURE_FP8DOT2) || __ARM_FEATURE_SSVE_FP8DOT2 svfloat16_t svdot[_f16_mf8]_fpm(svfloat16_t zda, svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm); svfloat16_t svdot[_n_f16_mf8]_fpm(svfloat16_t zda, svmfloat8_t zn, mfloat8_t zm, fpm_t fpm); * 8-bit floating-point indexed dot product to half-precision. // Only if (__ARM_FEATURE_SVE2 && __ARM_FEATURE_FP8DOT2) || __ARM_FEATURE_SSVE_FP8DOT2 svfloat16_t svdot_lane[_f16_mf8]_fpm(svfloat16_t zda, svmfloat8_t zn, svmfloat8_t zm, uint64_t imm0_7, fpm_t fpm); --- clang/include/clang/Basic/arm_sve.td | 19 +++ clang/include/clang/Basic/arm_sve_sme_incl.td | 1 + clang/lib/CodeGen/CGBuiltin.cpp | 11 +- .../AArch64/fp8-intrinsics/acle_sve2_fp8_fdot.c | 149 +++++++++++++++++++++ .../Sema/aarch64-sve2-intrinsics/acle_sve2_fp8.c | 23 +++- clang/utils/TableGen/SveEmitter.cpp | 9 +- llvm/include/llvm/IR/IntrinsicsAArch64.td | 16 +++ llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td | 9 +- llvm/lib/Target/AArch64/SVEInstrFormats.td | 23 +++- llvm/test/CodeGen/AArch64/fp8-sve-fdot.ll | 41 ++++++ 10 files changed, 287 insertions(+), 14 deletions(-) create mode 100644 clang/test/CodeGen/AArch64/fp8-intrinsics/acle_sve2_fp8_fdot.c create mode 100644 llvm/test/CodeGen/AArch64/fp8-sve-fdot.ll diff --git a/clang/include/clang/Basic/arm_sve.td b/clang/include/clang/Basic/arm_sve.td index b9f40faf0b18..2c8ca8014387 100644 --- a/clang/include/clang/Basic/arm_sve.td +++ b/clang/include/clang/Basic/arm_sve.td @@ -2476,3 +2476,22 @@ let SVETargetGuard = "sve2,fp8", SMETargetGuard = "sme2,fp8" in { def SVFCVTNB : SInst<"svcvtnb_mf8[_f32_x2]_fpm", "~2>", "f", MergeNone, "aarch64_sve_fp8_cvtnb", [VerifyRuntimeMode, SetsFPMR]>; def SVFCVTNT : SInst<"svcvtnt_mf8[_f32_x2]_fpm", "~~2>", "f", MergeNone, "aarch64_sve_fp8_cvtnt", [VerifyRuntimeMode, SetsFPMR]>; } + +let SVETargetGuard = "sve2,fp8dot2", SMETargetGuard ="sme,ssve-fp8dot2" in { + // 8-bit floating-point dot product to half-precision (vectors) + def SVFDOT_2WAY : SInst<"svdot[_f16_mf8]_fpm", "dd~~>", "h", MergeNone, "aarch64_sve_fp8_fdot", [VerifyRuntimeMode, SetsFPMR]>; + def SVFDOT_N_2WAY : SInst<"svdot[_n_f16_mf8]_fpm", "dd~!>", "h", MergeNone, "aarch64_sve_fp8_fdot", [VerifyRuntimeMode, SetsFPMR]>; + + // 8-bit floating-point dot product to half-precision (indexed) + def SVFDOT_LANE_2WAY : SInst<"svdot_lane[_f16_mf8]_fpm", "dd~~i>", "h", MergeNone, "aarch64_sve_fp8_fdot_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_7>]>; +} + +let SVETargetGuard = "sve2,fp8dot4", SMETargetGuard ="sme,ssve-fp8dot4" in { + // 8-bit floating-point dot product to single-precision (vectors) + def SVFDOT_4WAY : SInst<"svdot[_f32_mf8]_fpm", "dd~~>", "f", MergeNone, "aarch64_sve_fp8_fdot", [VerifyRuntimeMode, SetsFPMR]>; + def SVFDOT_N_4WAY : SInst<"svdot[_n_f32_mf8]_fpm", "dd~!>", "f", MergeNone, "aarch64_sve_fp8_fdot", [VerifyRuntimeMode, SetsFPMR]>; + + // 8-bit floating-point dot product to single-precision (indexed) + def SVFDOT_LANE_4WAY : SInst<"svdot_lane[_f32_mf8]_fpm", "dd~~i>", "f", MergeNone, "aarch64_sve_fp8_fdot_lane", [VerifyRuntimeMode, SetsFPMR], [ImmCheck<3, ImmCheck0_3>]>; +} + diff --git a/clang/include/clang/Basic/arm_sve_sme_incl.td b/clang/include/clang/Basic/arm_sve_sme_incl.td index e7cc40db7dca..ee899209ad83 100644 --- a/clang/include/clang/Basic/arm_sve_sme_incl.td +++ b/clang/include/clang/Basic/arm_sve_sme_incl.td @@ -89,6 +89,7 @@ include "arm_immcheck_incl.td" // j: element type promoted to 64bits (splat to vector type) // K: element type bitcast to a signed integer (splat to vector type) // L: element type bitcast to an unsigned integer (splat to vector type) +// !: mfloat8_t (splat to svmfloat8_t) // // i: constant uint64_t // k: int32_t diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 49a4c1ecc825..84048a4beac2 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -10719,7 +10719,16 @@ Value *CodeGenFunction::EmitSVEDupX(Value *Scalar, llvm::Type *Ty) { cast(Ty)->getElementCount(), Scalar); } -Value *CodeGenFunction::EmitSVEDupX(Value* Scalar) { +Value *CodeGenFunction::EmitSVEDupX(Value *Scalar) { + if (auto *Ty = Scalar->getType(); Ty->isVectorTy()) { +#ifndef NDEBUG + auto *VecTy = cast(Ty); + ElementCount EC = VecTy->getElementCount(); + assert(EC.isScalar() && VecTy->getElementType() == Int8Ty && + "Only <1 x i8> expected"); +#endif + Scalar = Builder.CreateExtractElement(Scalar, uint64_t(0)); + } return EmitSVEDupX(Scalar, getSVEVectorForElementType(Scalar->getType())); } diff --git a/clang/test/CodeGen/AArch64/fp8-intrinsics/acle_sve2_fp8_fdot.c b/clang/test/CodeGen/AArch64/fp8-intrinsics/acle_sve2_fp8_fdot.c new file mode 100644 index 000000000000..950a19115811 --- /dev/null +++ b/clang/test/CodeGen/AArch64/fp8-intrinsics/acle_sve2_fp8_fdot.c @@ -0,0 +1,149 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +sve2 -target-feature +fp8 -target-feature +fp8dot2 -target-feature +fp8dot4 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s +// RUN: %clang_cc1 -x c++ -triple aarch64-none-linux-gnu -target-feature +sme -target-feature +fp8 -target-feature +ssve-fp8dot2 -target-feature +ssve-fp8dot4 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CHECK-CXX + +// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +sve2 -target-feature +fp8 -target-feature +fp8dot2 -target-feature +fp8dot4 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s +// RUN: %clang_cc1 -x c++ -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sme -target-feature +fp8 -target-feature +ssve-fp8dot2 -target-feature +ssve-fp8dot4 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CHECK-CXX + +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +sve2 -target-feature +fp8 -target-feature +fp8dot2 -target-feature +fp8dot4 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme -target-feature +sme2 -target-feature +fp8 -target-feature +ssve-fp8dot2 -target-feature +ssve-fp8dot4 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s + +// REQUIRES: aarch64-registered-target + +#ifdef __ARM_FEATURE_SME +#include +#else +#include +#endif + +#ifdef SVE_OVERLOADED_FORMS +#define SVE_ACLE_FUNC(A1,A2_UNUSED,A3) A1##A3 +#else +#define SVE_ACLE_FUNC(A1,A2,A3) A1##A2##A3 +#endif + +#ifdef __ARM_FEATURE_SME +#define STREAMING __arm_streaming +#else +#define STREAMING +#endif + +// CHECK-LABEL: define dso_local @test_svdot_f32_mf8( +// CHECK-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv4f32( [[ZDA]], [[ZN]], [[ZM]]) +// CHECK-NEXT: ret [[TMP0]] +// +// CHECK-CXX-LABEL: define dso_local @_Z18test_svdot_f32_mf8u13__SVFloat32_tu13__SVMfloat8_tS0_m( +// CHECK-CXX-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0:[0-9]+]] { +// CHECK-CXX-NEXT: [[ENTRY:.*:]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv4f32( [[ZDA]], [[ZN]], [[ZM]]) +// CHECK-CXX-NEXT: ret [[TMP0]] +// +svfloat32_t test_svdot_f32_mf8(svfloat32_t zda, svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm) STREAMING { + return SVE_ACLE_FUNC(svdot,_f32_mf8,_fpm)(zda, zn, zm, fpm); +} + +// CHECK-LABEL: define dso_local @test_svdot_n_f32_mf8( +// CHECK-SAME: [[ZDA:%.*]], [[ZN:%.*]], <1 x i8> [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-NEXT: [[TMP0:%.*]] = extractelement <1 x i8> [[ZM]], i64 0 +// CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement poison, i8 [[TMP0]], i64 0 +// CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector [[DOTSPLATINSERT]], poison, zeroinitializer +// CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv4f32( [[ZDA]], [[ZN]], [[DOTSPLAT]]) +// CHECK-NEXT: ret [[TMP1]] +// +// CHECK-CXX-LABEL: define dso_local @_Z20test_svdot_n_f32_mf8u13__SVFloat32_tu13__SVMfloat8_tu6__mfp8m( +// CHECK-CXX-SAME: [[ZDA:%.*]], [[ZN:%.*]], <1 x i8> [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-CXX-NEXT: [[ENTRY:.*:]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = extractelement <1 x i8> [[ZM]], i64 0 +// CHECK-CXX-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement poison, i8 [[TMP0]], i64 0 +// CHECK-CXX-NEXT: [[DOTSPLAT:%.*]] = shufflevector [[DOTSPLATINSERT]], poison, zeroinitializer +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv4f32( [[ZDA]], [[ZN]], [[DOTSPLAT]]) +// CHECK-CXX-NEXT: ret [[TMP1]] +// +svfloat32_t test_svdot_n_f32_mf8(svfloat32_t zda, svmfloat8_t zn, mfloat8_t zm, fpm_t fpm) STREAMING { + return SVE_ACLE_FUNC(svdot,_n_f32_mf8,_fpm)(zda, zn, zm, fpm); +} + +// CHECK-LABEL: define dso_local @test_svdot_f16_mf8( +// CHECK-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv8f16( [[ZDA]], [[ZN]], [[ZM]]) +// CHECK-NEXT: ret [[TMP0]] +// +// CHECK-CXX-LABEL: define dso_local @_Z18test_svdot_f16_mf8u13__SVFloat16_tu13__SVMfloat8_tS0_m( +// CHECK-CXX-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-CXX-NEXT: [[ENTRY:.*:]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv8f16( [[ZDA]], [[ZN]], [[ZM]]) +// CHECK-CXX-NEXT: ret [[TMP0]] +// +svfloat16_t test_svdot_f16_mf8(svfloat16_t zda, svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm) STREAMING { + return SVE_ACLE_FUNC(svdot,_f16_mf8,_fpm)(zda, zn, zm, fpm); +} + +// CHECK-LABEL: define dso_local @test_svdot_n_f16_mf8( +// CHECK-SAME: [[ZDA:%.*]], [[ZN:%.*]], <1 x i8> [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-NEXT: [[TMP0:%.*]] = extractelement <1 x i8> [[ZM]], i64 0 +// CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement poison, i8 [[TMP0]], i64 0 +// CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector [[DOTSPLATINSERT]], poison, zeroinitializer +// CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv8f16( [[ZDA]], [[ZN]], [[DOTSPLAT]]) +// CHECK-NEXT: ret [[TMP1]] +// +// CHECK-CXX-LABEL: define dso_local @_Z20test_svdot_n_f16_mf8u13__SVFloat16_tu13__SVMfloat8_tu6__mfp8m( +// CHECK-CXX-SAME: [[ZDA:%.*]], [[ZN:%.*]], <1 x i8> [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-CXX-NEXT: [[ENTRY:.*:]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = extractelement <1 x i8> [[ZM]], i64 0 +// CHECK-CXX-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement poison, i8 [[TMP0]], i64 0 +// CHECK-CXX-NEXT: [[DOTSPLAT:%.*]] = shufflevector [[DOTSPLATINSERT]], poison, zeroinitializer +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.nxv8f16( [[ZDA]], [[ZN]], [[DOTSPLAT]]) +// CHECK-CXX-NEXT: ret [[TMP1]] +// +svfloat16_t test_svdot_n_f16_mf8(svfloat16_t zda, svmfloat8_t zn, mfloat8_t zm, fpm_t fpm) STREAMING { + return SVE_ACLE_FUNC(svdot,_n_f16_mf8,_fpm)(zda, zn, zm, fpm); +} + +// CHECK-LABEL: define dso_local @test_svdot_lane_f32_mf8( +// CHECK-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.lane.nxv4f32( [[ZDA]], [[ZN]], [[ZM]], i32 3) +// CHECK-NEXT: ret [[TMP0]] +// +// CHECK-CXX-LABEL: define dso_local @_Z23test_svdot_lane_f32_mf8u13__SVFloat32_tu13__SVMfloat8_tS0_m( +// CHECK-CXX-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-CXX-NEXT: [[ENTRY:.*:]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.lane.nxv4f32( [[ZDA]], [[ZN]], [[ZM]], i32 3) +// CHECK-CXX-NEXT: ret [[TMP0]] +// +svfloat32_t test_svdot_lane_f32_mf8(svfloat32_t zda, svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm) STREAMING { + return SVE_ACLE_FUNC(svdot_lane,_f32_mf8,_fpm)(zda, zn, zm, 3, fpm); +} + +// CHECK-LABEL: define dso_local @test_svdot_lane_f16_mf8( +// CHECK-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.lane.nxv8f16( [[ZDA]], [[ZN]], [[ZM]], i32 7) +// CHECK-NEXT: ret [[TMP0]] +// +// CHECK-CXX-LABEL: define dso_local @_Z23test_svdot_lane_f16_mf8u13__SVFloat16_tu13__SVMfloat8_tS0_m( +// CHECK-CXX-SAME: [[ZDA:%.*]], [[ZN:%.*]], [[ZM:%.*]], i64 noundef [[FPM:%.*]]) #[[ATTR0]] { +// CHECK-CXX-NEXT: [[ENTRY:.*:]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.set.fpmr(i64 [[FPM]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.fp8.fdot.lane.nxv8f16( [[ZDA]], [[ZN]], [[ZM]], i32 7) +// CHECK-CXX-NEXT: ret [[TMP0]] +// +svfloat16_t test_svdot_lane_f16_mf8(svfloat16_t zda, svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm) STREAMING { + return SVE_ACLE_FUNC(svdot_lane,_f16_mf8,_fpm)(zda, zn, zm, 7, fpm); +} diff --git a/clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_fp8.c b/clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_fp8.c index e47efccf4804..d76e729b6a39 100644 --- a/clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_fp8.c +++ b/clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_fp8.c @@ -4,7 +4,7 @@ #include -void test_features(svmfloat8_t zn, fpm_t fpm) { +void test_features(svmfloat8_t zn, svmfloat8_t zm, mfloat8_t x, fpm_t fpm) { svcvt1_bf16_mf8_fpm(zn, fpm); // expected-error@-1 {{'svcvt1_bf16_mf8_fpm' needs target feature (sve,sve2,fp8)|(sme,sme2,fp8)}} svcvt2_bf16_mf8_fpm(zn, fpm); @@ -30,4 +30,25 @@ void test_features(svmfloat8_t zn, fpm_t fpm) { // expected-error@-1 {{'svcvtnb_mf8_f32_x2_fpm' needs target feature (sve,sve2,fp8)|(sme,sme2,fp8)}} svcvtnt_mf8_f32_x2_fpm(zn, svcreate2(svundef_f32(), svundef_f32()), fpm); // expected-error@-1 {{'svcvtnt_mf8_f32_x2_fpm' needs target feature (sve,sve2,fp8)|(sme,sme2,fp8)}} + + svdot_f32_mf8_fpm(svundef_f32(), zn, zm, fpm); +// expected-error@-1 {{'svdot_f32_mf8_fpm' needs target feature (sve,sve2,fp8dot4)|(sme,ssve-fp8dot4)}} + svdot_n_f32_mf8_fpm(svundef_f32(), zn, x, fpm); +// expected-error@-1 {{'svdot_n_f32_mf8_fpm' needs target feature (sve,sve2,fp8dot4)|(sme,ssve-fp8dot4)}} + svdot_f16_mf8_fpm(svundef_f16(), zn, zm, fpm); +// expected-error@-1 {{'svdot_f16_mf8_fpm' needs target feature (sve,sve2,fp8dot2)|(sme,ssve-fp8dot2)}} + svdot_n_f16_mf8_fpm(svundef_f16(), zn, x, fpm); +// expected-error@-1 {{'svdot_n_f16_mf8_fpm' needs target feature (sve,sve2,fp8dot2)|(sme,ssve-fp8dot2)}} + svdot_lane_f32_mf8_fpm(svundef_f32(), zn, zm, 3, fpm); +// expected-error@-1 {{'svdot_lane_f32_mf8_fpm' needs target feature (sve,sve2,fp8dot4)|(sme,ssve-fp8dot4)}} + svdot_lane_f16_mf8_fpm(svundef_f16(), zn, zm, 7, fpm); +// expected-error@-1 {{'svdot_lane_f16_mf8_fpm' needs target feature (sve,sve2,fp8dot2)|(sme,ssve-fp8dot2)}} } + + +void test_imm_range(svmfloat8_t zn, svmfloat8_t zm, fpm_t fpm) { + svdot_lane_f32_mf8_fpm(svundef_f32(), zn, zm, -1, fpm); +// expected-error@-1 {{argument value 18446744073709551615 is outside the valid range [0, 3]}} + svdot_lane_f16_mf8_fpm(svundef_f16(), zn, zm, -1, fpm); +// expected-error@-1 {{argument value 18446744073709551615 is outside the valid range [0, 7]}} +} \ No newline at end of file diff --git a/clang/utils/TableGen/SveEmitter.cpp b/clang/utils/TableGen/SveEmitter.cpp index 2d9f5c338101..14e5637f6251 100644 --- a/clang/utils/TableGen/SveEmitter.cpp +++ b/clang/utils/TableGen/SveEmitter.cpp @@ -253,7 +253,7 @@ public: /// Return true if the intrinsic takes a splat operand. bool hasSplat() const { // These prototype modifiers are described in arm_sve.td. - return Proto.find_first_of("ajfrKLR@") != std::string::npos; + return Proto.find_first_of("ajfrKLR@!") != std::string::npos; } /// Return the parameter index of the splat operand. @@ -262,7 +262,7 @@ public: for (; I < Proto.size(); ++I, ++Param) { if (Proto[I] == 'a' || Proto[I] == 'j' || Proto[I] == 'f' || Proto[I] == 'r' || Proto[I] == 'K' || Proto[I] == 'L' || - Proto[I] == 'R' || Proto[I] == '@') + Proto[I] == 'R' || Proto[I] == '@' || Proto[I] == '!') break; // Multivector modifier can be skipped @@ -910,6 +910,11 @@ void SVEType::applyModifier(char Mod) { Kind = MFloat8; ElementBitwidth = 8; break; + case '!': + Kind = MFloat8; + Bitwidth = ElementBitwidth = 8; + NumVectors = 0; + break; case '.': llvm_unreachable(". is never a type in itself"); break; diff --git a/llvm/include/llvm/IR/IntrinsicsAArch64.td b/llvm/include/llvm/IR/IntrinsicsAArch64.td index 654bc64a30bd..eeecc5bb75cc 100644 --- a/llvm/include/llvm/IR/IntrinsicsAArch64.td +++ b/llvm/include/llvm/IR/IntrinsicsAArch64.td @@ -3911,6 +3911,22 @@ let TargetPrefix = "aarch64" in { [llvm_nxv16i8_ty, llvm_anyvector_ty, LLVMMatchType<0>], [IntrReadMem, IntrInaccessibleMemOnly]>; + // Dot product + class SVE2_FP8_FMLA_FDOT + : DefaultAttrsIntrinsic<[llvm_anyvector_ty], + [LLVMMatchType<0>, + llvm_nxv16i8_ty, llvm_nxv16i8_ty], + [IntrReadMem, IntrInaccessibleMemOnly]>; + + class SVE2_FP8_FMLA_FDOT_Lane + : DefaultAttrsIntrinsic<[llvm_anyvector_ty], + [LLVMMatchType<0>, + llvm_nxv16i8_ty, llvm_nxv16i8_ty, llvm_i32_ty], + [IntrReadMem, IntrInaccessibleMemOnly, ImmArg>]>; + + def int_aarch64_sve_fp8_fdot : SVE2_FP8_FMLA_FDOT; + def int_aarch64_sve_fp8_fdot_lane : SVE2_FP8_FMLA_FDOT_Lane; + class SME2_FP8_CVT_X2_Single_Intrinsic : DefaultAttrsIntrinsic<[llvm_anyvector_ty, LLVMMatchType<0>], [llvm_nxv16i8_ty], diff --git a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td index 1a5be28dce4a..6971aae6dbe5 100644 --- a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td @@ -4423,18 +4423,17 @@ let Predicates = [HasSVE2, HasF8F16MM] in { let Predicates = [HasSSVE_FP8DOT2] in { // FP8 Widening Dot-Product - Indexed Group -defm FDOT_ZZZI_BtoH : sve2_fp8_dot_indexed_h<"fdot">; +defm FDOT_ZZZI_BtoH : sve2_fp8_dot_indexed_h<"fdot", int_aarch64_sve_fp8_fdot_lane>; // FP8 Widening Dot-Product - Group -// TODO: Replace nxv16i8 by nxv16f8 -defm FDOT_ZZZ_BtoH : sve_fp8_dot<0b0, ZPR16, "fdot">; +defm FDOT_ZZZ_BtoH : sve_fp8_dot<0b0, ZPR16, "fdot", nxv8f16, int_aarch64_sve_fp8_fdot>; } // TODO: Replace nxv16i8 by nxv16f8 let Predicates = [HasSSVE_FP8DOT4] in { // FP8 Widening Dot-Product - Indexed Group -defm FDOT_ZZZI_BtoS : sve2_fp8_dot_indexed_s<"fdot">; +defm FDOT_ZZZI_BtoS : sve2_fp8_dot_indexed_s<"fdot", int_aarch64_sve_fp8_fdot_lane>; // FP8 Widening Dot-Product - Group -defm FDOT_ZZZ_BtoS : sve_fp8_dot<0b1, ZPR32, "fdot">; +defm FDOT_ZZZ_BtoS : sve_fp8_dot<0b1, ZPR32, "fdot", nxv4f32, int_aarch64_sve_fp8_fdot>; } let Predicates = [HasSVE2orSME2, HasLUT] in { diff --git a/llvm/lib/Target/AArch64/SVEInstrFormats.td b/llvm/lib/Target/AArch64/SVEInstrFormats.td index 22b56f7f3e9a..abb12487dc80 100644 --- a/llvm/lib/Target/AArch64/SVEInstrFormats.td +++ b/llvm/lib/Target/AArch64/SVEInstrFormats.td @@ -9267,10 +9267,16 @@ multiclass sve_float_dot(NAME)>; } -multiclass sve_fp8_dot { - def NAME : sve_float_dot{ +multiclass sve_fp8_dot { + def NAME : sve_float_dot { let Uses = [FPMR, FPCR]; + + let mayLoad = 1; + let mayStore = 0; } + + def : SVE_3_Op_Pat(NAME)>; } class sve_float_dot_indexed opc, ZPRRegOp dst_ty, Operand iop_ty, string m let DestructiveInstType = DestructiveOther; let hasSideEffects = 0; let mayRaiseFPException = 1; + + let mayLoad = 1; + let mayStore = 0; } // FP8 Widening Dot-Product - Indexed Group -multiclass sve2_fp8_dot_indexed_h{ - def NAME : sve_fp8_dot_indexed<{0, ?, ?, ?}, ZPR16, VectorIndexH, asm> { +multiclass sve2_fp8_dot_indexed_h { + def NAME : sve_fp8_dot_indexed<{0, ?, ?, ?}, ZPR16, VectorIndexH32b, asm> { bits<3> iop; let Inst{20-19} = iop{2-1}; let Inst{11} = iop{0}; } + + def : SVE_4_Op_Pat(NAME)>; } -multiclass sve2_fp8_dot_indexed_s{ +multiclass sve2_fp8_dot_indexed_s { def NAME : sve_fp8_dot_indexed<{1, ?, ?, 0}, ZPR32, VectorIndexS32b, asm> { bits<2> iop; let Inst{20-19} = iop{1-0}; } + + def : SVE_4_Op_Pat(NAME)>; } // FP8 Look up table diff --git a/llvm/test/CodeGen/AArch64/fp8-sve-fdot.ll b/llvm/test/CodeGen/AArch64/fp8-sve-fdot.ll new file mode 100644 index 000000000000..0cead19a74bf --- /dev/null +++ b/llvm/test/CodeGen/AArch64/fp8-sve-fdot.ll @@ -0,0 +1,41 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc -mattr=+sve2,+fp8,+fp8dot2,+fp8dot4 < %s | FileCheck %s +; RUN: llc -mattr=+sme,+fp8,+ssve-fp8dot2,+ssve-fp8dot4 --force-streaming < %s | FileCheck %s + +target triple = "aarch64-linux" + +define @fdot_4way( %a, %s1, %s2) { +; CHECK-LABEL: fdot_4way: +; CHECK: // %bb.0: +; CHECK-NEXT: fdot z0.s, z1.b, z2.b +; CHECK-NEXT: ret + %r = call @llvm.aarch64.sve.fp8.fdot.nxv4f32( %a, %s1, %s2) + ret %r +} + +define @fdot_2way( %a, %s1, %s2) { +; CHECK-LABEL: fdot_2way: +; CHECK: // %bb.0: +; CHECK-NEXT: fdot z0.h, z1.b, z2.b +; CHECK-NEXT: ret + %r = call @llvm.aarch64.sve.fp8.fdot.nxv8f16( %a, %s1, %s2) + ret %r +} + +define @fdot_4way_lane( %a, %s1, %s2) { +; CHECK-LABEL: fdot_4way_lane: +; CHECK: // %bb.0: +; CHECK-NEXT: fdot z0.s, z1.b, z2.b[3] +; CHECK-NEXT: ret + %r = call @llvm.aarch64.sve.fp8.fdot.lane.nxv4f32( %a, %s1, %s2, i32 3) + ret %r +} + +define @fdot_2way_lane( %a, %s1, %s2) { +; CHECK-LABEL: fdot_2way_lane: +; CHECK: // %bb.0: +; CHECK-NEXT: fdot z0.h, z1.b, z2.b[5] +; CHECK-NEXT: ret + %r = call @llvm.aarch64.sve.fp8.fdot.lane.nxv8f16( %a, %s1, %s2, i32 5) + ret %r +} -- cgit v1.2.3 From 89f1f32bff76c8cf4545ada34663c6a758214cf0 Mon Sep 17 00:00:00 2001 From: Durgadoss R Date: Fri, 13 Dec 2024 19:42:24 +0530 Subject: [MLIR][NVVM] Refactor tests in nvvmir.mlir (#119731) * Move the negative tests from nvvmir.mlir to nvvm-invalid.mlir. With this, all the error-handling tests are moved to the nvvm-invalid.mlir file. * Move the tma_prefetch tests to a separate file, as there are many tests, and fix the FileCheck prefix for these. * Since undef is discouraged, we use an 'i64 0' as the placeholder value for cache-hint when unused. Signed-off-by: Durgadoss R --- mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td | 4 +- mlir/test/Target/LLVMIR/nvvm/tma_prefetch.mlir | 61 +++++++++++++++++ mlir/test/Target/LLVMIR/nvvmir-invalid.mlir | 35 ++++++++++ mlir/test/Target/LLVMIR/nvvmir.mlir | 95 -------------------------- 4 files changed, 98 insertions(+), 97 deletions(-) create mode 100644 mlir/test/Target/LLVMIR/nvvm/tma_prefetch.mlir diff --git a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td index 14880a1a66ba..6f8971ca3c00 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td @@ -2017,10 +2017,10 @@ def NVVM_CpAsyncBulkTensorPrefetchOp : translatedOperands.push_back(moduleTranslation.lookupValue(v)); llvm::LLVMContext &ctx = moduleTranslation.getLLVMContext(); - auto *i64Undef = llvm::UndefValue::get(llvm::IntegerType::get(ctx, 64)); + auto *i64Unused = llvm::ConstantInt::get(llvm::Type::getInt64Ty(ctx), 0); bool isCacheHint = op.getL2CacheHint() ? true : false; - translatedOperands.push_back(isCacheHint ? $l2CacheHint : i64Undef); + translatedOperands.push_back(isCacheHint ? $l2CacheHint : i64Unused); translatedOperands.push_back(builder.getInt1(isCacheHint)); auto intId = NVVM::CpAsyncBulkTensorPrefetchOp::getIntrinsicID( diff --git a/mlir/test/Target/LLVMIR/nvvm/tma_prefetch.mlir b/mlir/test/Target/LLVMIR/nvvm/tma_prefetch.mlir new file mode 100644 index 000000000000..7be29fd616a6 --- /dev/null +++ b/mlir/test/Target/LLVMIR/nvvm/tma_prefetch.mlir @@ -0,0 +1,61 @@ +// RUN: mlir-translate -mlir-to-llvmir %s -split-input-file --verify-diagnostics | FileCheck %s + +// CHECK-LABEL: @tma_prefetch_1d +llvm.func @tma_prefetch_1d(%tma_desc : !llvm.ptr, %d0 : i32, %ch : i64) { + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.1d(ptr %0, i32 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.1d(ptr %0, i32 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0] l2_cache_hint = %ch : !llvm.ptr + llvm.return +} + +// CHECK-LABEL: @tma_prefetch_2d +llvm.func @tma_prefetch_2d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %ch : i64) { + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.2d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.2d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1] l2_cache_hint = %ch : !llvm.ptr + llvm.return +} + +// CHECK-LABEL: @tma_prefetch_3d +llvm.func @tma_prefetch_3d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %d2 : i32, %off0 : i16, %ch : i64) { + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] l2_cache_hint = %ch : !llvm.ptr + + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] im2col[%off0] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] im2col[%off0] l2_cache_hint = %ch : !llvm.ptr + llvm.return +} + +// CHECK-LABEL: @tma_prefetch_4d +llvm.func @tma_prefetch_4d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %d2 : i32, %d3 : i32, %off0 : i16, %off1 : i16, %ch : i64) { + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] l2_cache_hint = %ch : !llvm.ptr + + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] im2col[%off0, %off1] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] im2col[%off0, %off1] l2_cache_hint = %ch : !llvm.ptr + llvm.return +} + +// CHECK-LABEL: @tma_prefetch_5d +llvm.func @tma_prefetch_5d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %d2 : i32, %d3 : i32, %d4 : i32, %off0 : i16, %off1 : i16, %off2 : i16, %ch : i64) { + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] l2_cache_hint = %ch : !llvm.ptr + + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 0, i1 false) + // CHECK: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true) + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] im2col[%off0, %off1, %off2] : !llvm.ptr + nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] im2col[%off0, %off1, %off2] l2_cache_hint = %ch : !llvm.ptr + llvm.return +} diff --git a/mlir/test/Target/LLVMIR/nvvmir-invalid.mlir b/mlir/test/Target/LLVMIR/nvvmir-invalid.mlir index 194011d1621a..44c7126255dc 100644 --- a/mlir/test/Target/LLVMIR/nvvmir-invalid.mlir +++ b/mlir/test/Target/LLVMIR/nvvmir-invalid.mlir @@ -2,6 +2,41 @@ // ----- +llvm.func @kernel_func(%numberOfThreads : i32) { + // expected-error @below {{'nvvm.barrier' op barrier id is missing, it should be set between 0 to 15}} + nvvm.barrier number_of_threads = %numberOfThreads +} + +// ----- + +// expected-error @below {{'"nvvm.minctasm"' attribute must be integer constant}} +llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.minctasm = "foo"} { + llvm.return +} + +// ----- + +// expected-error @below {{'"nvvm.maxnreg"' attribute must be integer constant}} +llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.maxnreg = "boo"} { + llvm.return +} + +// ----- + +// expected-error @below {{'"nvvm.reqntid"' attribute must be integer array with maximum 3 index}} +llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.reqntid = array} { + llvm.return +} + +// ----- + +// expected-error @below {{'"nvvm.maxntid"' attribute must be integer array with maximum 3 index}} +llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.maxntid = array} { + llvm.return +} + +// ----- + llvm.func @nvvm_fence_proxy_acquire(%addr : !llvm.ptr, %size : i32) { // expected-error @below {{'nvvm.fence.proxy.acquire' op uni-directional proxies only support generic for from_proxy attribute}} nvvm.fence.proxy.acquire #nvvm.mem_scope %addr, %size from_proxy=#nvvm.proxy_kind to_proxy=#nvvm.proxy_kind diff --git a/mlir/test/Target/LLVMIR/nvvmir.mlir b/mlir/test/Target/LLVMIR/nvvmir.mlir index a4a3581d6b75..2749e42c40bc 100644 --- a/mlir/test/Target/LLVMIR/nvvmir.mlir +++ b/mlir/test/Target/LLVMIR/nvvmir.mlir @@ -642,39 +642,6 @@ llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.maxntid = array} { - llvm.return -} - -// ----- -// expected-error @below {{'"nvvm.maxntid"' attribute must be integer array with maximum 3 index}} -llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.maxntid = array} { - llvm.return -} - // ----- // CHECK: !nvvm.annotations = // CHECK: !1 = !{ptr @kernel_func, !"grid_constant", !2} @@ -737,65 +704,3 @@ llvm.func @nvvm_breakpoint() { nvvm.breakpoint llvm.return } - -// ----- - -// CHECK-LABEL: @tma_prefetch_1d -llvm.func @tma_prefetch_1d(%tma_desc : !llvm.ptr, %d0 : i32, %ch : i64) { - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.1d(ptr %0, i32 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.1d(ptr %0, i32 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0] l2_cache_hint = %ch : !llvm.ptr - llvm.return -} - -// CHECK-LABEL: @tma_prefetch_2d -llvm.func @tma_prefetch_2d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %ch : i64) { - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.2d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.2d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1] l2_cache_hint = %ch : !llvm.ptr - llvm.return -} - -// CHECK-LABEL: @tma_prefetch_3d -llvm.func @tma_prefetch_3d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %d2 : i32, %off0 : i16, %ch : i64) { - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] l2_cache_hint = %ch : !llvm.ptr - - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.3d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] im2col[%off0] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2] im2col[%off0] l2_cache_hint = %ch : !llvm.ptr - llvm.return -} - -// CHECK-LABEL: @tma_prefetch_4d -llvm.func @tma_prefetch_4d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %d2 : i32, %d3 : i32, %off0 : i16, %off1 : i16, %ch : i64) { - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] l2_cache_hint = %ch : !llvm.ptr - - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.4d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] im2col[%off0, %off1] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3] im2col[%off0, %off1] l2_cache_hint = %ch : !llvm.ptr - llvm.return -} - -// CHECK-LABEL: @tma_prefetch_5d -llvm.func @tma_prefetch_5d(%tma_desc : !llvm.ptr, %d0 : i32, %d1 : i32, %d2 : i32, %d3 : i32, %d4 : i32, %off0 : i16, %off1 : i16, %off2 : i16, %ch : i64) { - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.tile.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] l2_cache_hint = %ch : !llvm.ptr - - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 undef, i1 false) - // CHECK-LLVM: call void @llvm.nvvm.cp.async.bulk.tensor.prefetch.im2col.5d(ptr %0, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i16 %{{.*}}, i64 %{{.*}}, i1 true) - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] im2col[%off0, %off1, %off2] : !llvm.ptr - nvvm.cp.async.bulk.tensor.prefetch %tma_desc, box[%d0, %d1, %d2, %d3, %d4] im2col[%off0, %off1, %off2] l2_cache_hint = %ch : !llvm.ptr - llvm.return -} -- cgit v1.2.3 From 4a0d53a0b0a58a3c6980a7c551357ac71ba3db10 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Fri, 13 Dec 2024 14:18:33 +0000 Subject: PatternMatch: migrate to CmpPredicate (#118534) With the introduction of CmpPredicate in 51a895a (IR: introduce struct with CmpInst::Predicate and samesign), PatternMatch is one of the first key pieces of infrastructure that must be updated to match a CmpInst respecting samesign information. Implement this change to Cmp-matchers. This is a preparatory step in migrating the codebase over to CmpPredicate. Since we no functional changes are desired at this stage, we have chosen not to migrate CmpPredicate::operator==(CmpPredicate) calls to use CmpPredicate::getMatching(), as that would have visible impact on tests that are not yet written: instead, we call CmpPredicate::operator==(Predicate), preserving the old behavior, while also inserting a few FIXME comments for follow-ups. --- llvm/include/llvm/IR/CmpPredicate.h | 21 ++++ llvm/include/llvm/IR/PatternMatch.h | 106 ++++++++++----------- llvm/lib/Analysis/IVDescriptors.cpp | 4 +- llvm/lib/Analysis/InstructionSimplify.cpp | 16 ++-- llvm/lib/Analysis/OverflowInstAnalysis.cpp | 2 +- llvm/lib/Analysis/ValueTracking.cpp | 22 ++--- llvm/lib/CodeGen/CodeGenPrepare.cpp | 4 +- llvm/lib/CodeGen/ExpandMemCmp.cpp | 2 +- llvm/lib/IR/Instructions.cpp | 18 ++++ .../Target/AArch64/AArch64TargetTransformInfo.cpp | 2 +- llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp | 2 +- .../Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp | 2 +- .../Target/Hexagon/HexagonLoopIdiomRecognition.cpp | 4 +- llvm/lib/Target/X86/X86ISelLowering.cpp | 2 +- .../Transforms/InstCombine/InstCombineAddSub.cpp | 8 +- .../Transforms/InstCombine/InstCombineAndOrXor.cpp | 24 ++--- .../Transforms/InstCombine/InstCombineCompares.cpp | 26 ++--- .../Transforms/InstCombine/InstCombineSelect.cpp | 54 ++++++----- .../InstCombine/InstCombineVectorOps.cpp | 4 +- .../InstCombine/InstructionCombining.cpp | 6 +- llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp | 4 +- .../Transforms/Scalar/ConstraintElimination.cpp | 8 +- .../lib/Transforms/Scalar/DeadStoreElimination.cpp | 2 +- llvm/lib/Transforms/Scalar/EarlyCSE.cpp | 6 +- llvm/lib/Transforms/Scalar/GuardWidening.cpp | 2 +- llvm/lib/Transforms/Scalar/JumpThreading.cpp | 4 +- llvm/lib/Transforms/Scalar/LICM.cpp | 11 ++- llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp | 2 +- llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp | 4 +- llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp | 10 +- llvm/lib/Transforms/Utils/LoopPeel.cpp | 2 +- .../Transforms/Utils/ScalarEvolutionExpander.cpp | 2 +- llvm/lib/Transforms/Utils/SimplifyIndVar.cpp | 8 +- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 16 ++-- llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 10 +- llvm/unittests/IR/PatternMatch.cpp | 4 +- 36 files changed, 232 insertions(+), 192 deletions(-) diff --git a/llvm/include/llvm/IR/CmpPredicate.h b/llvm/include/llvm/IR/CmpPredicate.h index 4b1be7beb2b6..ce78e4311f9f 100644 --- a/llvm/include/llvm/IR/CmpPredicate.h +++ b/llvm/include/llvm/IR/CmpPredicate.h @@ -24,6 +24,9 @@ class CmpPredicate { bool HasSameSign; public: + /// Default constructor. + CmpPredicate() : Pred(CmpInst::BAD_ICMP_PREDICATE), HasSameSign(false) {} + /// Constructed implictly with a either Predicate and samesign information, or /// just a Predicate, dropping samesign information. CmpPredicate(CmpInst::Predicate Pred, bool HasSameSign = false) @@ -52,11 +55,29 @@ public: /// An operator== on the underlying Predicate. bool operator==(CmpInst::Predicate P) const { return Pred == P; } + bool operator!=(CmpInst::Predicate P) const { return Pred != P; } /// There is no operator== defined on CmpPredicate. Use getMatching instead to /// get the canonicalized matching CmpPredicate. bool operator==(CmpPredicate) const = delete; + bool operator!=(CmpPredicate) const = delete; + + /// Do a ICmpInst::getCmpPredicate() or CmpInst::getPredicate(), as + /// appropriate. + static CmpPredicate get(const CmpInst *Cmp); + + /// Get the swapped predicate of a CmpPredicate. + static CmpPredicate getSwapped(CmpPredicate P); + + /// Get the swapped predicate of a CmpInst. + static CmpPredicate getSwapped(const CmpInst *Cmp); + + /// Provided to facilitate storing a CmpPredicate in data structures that + /// require hashing. + friend hash_code hash_value(const CmpPredicate &Arg); // NOLINT }; + +[[nodiscard]] hash_code hash_value(const CmpPredicate &Arg); } // namespace llvm #endif diff --git a/llvm/include/llvm/IR/PatternMatch.h b/llvm/include/llvm/IR/PatternMatch.h index fc4c0124d00b..cc0e8d598ff1 100644 --- a/llvm/include/llvm/IR/PatternMatch.h +++ b/llvm/include/llvm/IR/PatternMatch.h @@ -688,7 +688,7 @@ inline api_pred_ty m_LowBitMaskOrZero(const APInt *&V) { } struct icmp_pred_with_threshold { - ICmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *Thr; bool isValue(const APInt &C) { return ICmpInst::compare(C, *Thr, Pred); } }; @@ -1557,16 +1557,16 @@ template inline Exact_match m_Exact(const T &SubPattern) { // Matchers for CmpInst classes // -template struct CmpClass_match { - PredicateTy *Predicate; + CmpPredicate *Predicate; LHS_t L; RHS_t R; // The evaluation order is always stable, regardless of Commutability. // The LHS is always matched first. - CmpClass_match(PredicateTy &Pred, const LHS_t &LHS, const RHS_t &RHS) + CmpClass_match(CmpPredicate &Pred, const LHS_t &LHS, const RHS_t &RHS) : Predicate(&Pred), L(LHS), R(RHS) {} CmpClass_match(const LHS_t &LHS, const RHS_t &RHS) : Predicate(nullptr), L(LHS), R(RHS) {} @@ -1575,12 +1575,13 @@ struct CmpClass_match { if (auto *I = dyn_cast(V)) { if (L.match(I->getOperand(0)) && R.match(I->getOperand(1))) { if (Predicate) - *Predicate = I->getPredicate(); + *Predicate = CmpPredicate::get(I); return true; - } else if (Commutable && L.match(I->getOperand(1)) && - R.match(I->getOperand(0))) { + } + if (Commutable && L.match(I->getOperand(1)) && + R.match(I->getOperand(0))) { if (Predicate) - *Predicate = I->getSwappedPredicate(); + *Predicate = CmpPredicate::getSwapped(I); return true; } } @@ -1589,60 +1590,58 @@ struct CmpClass_match { }; template -inline CmpClass_match -m_Cmp(CmpInst::Predicate &Pred, const LHS &L, const RHS &R) { - return CmpClass_match(Pred, L, R); +inline CmpClass_match m_Cmp(CmpPredicate &Pred, const LHS &L, + const RHS &R) { + return CmpClass_match(Pred, L, R); } template -inline CmpClass_match -m_ICmp(ICmpInst::Predicate &Pred, const LHS &L, const RHS &R) { - return CmpClass_match(Pred, L, R); +inline CmpClass_match m_ICmp(CmpPredicate &Pred, + const LHS &L, const RHS &R) { + return CmpClass_match(Pred, L, R); } template -inline CmpClass_match -m_FCmp(FCmpInst::Predicate &Pred, const LHS &L, const RHS &R) { - return CmpClass_match(Pred, L, R); +inline CmpClass_match m_FCmp(CmpPredicate &Pred, + const LHS &L, const RHS &R) { + return CmpClass_match(Pred, L, R); } template -inline CmpClass_match -m_Cmp(const LHS &L, const RHS &R) { - return CmpClass_match(L, R); +inline CmpClass_match m_Cmp(const LHS &L, const RHS &R) { + return CmpClass_match(L, R); } template -inline CmpClass_match -m_ICmp(const LHS &L, const RHS &R) { - return CmpClass_match(L, R); +inline CmpClass_match m_ICmp(const LHS &L, const RHS &R) { + return CmpClass_match(L, R); } template -inline CmpClass_match -m_FCmp(const LHS &L, const RHS &R) { - return CmpClass_match(L, R); +inline CmpClass_match m_FCmp(const LHS &L, const RHS &R) { + return CmpClass_match(L, R); } // Same as CmpClass, but instead of saving Pred as out output variable, match a // specific input pred for equality. -template struct SpecificCmpClass_match { - const PredicateTy Predicate; + const CmpPredicate Predicate; LHS_t L; RHS_t R; - SpecificCmpClass_match(PredicateTy Pred, const LHS_t &LHS, const RHS_t &RHS) + SpecificCmpClass_match(CmpPredicate Pred, const LHS_t &LHS, const RHS_t &RHS) : Predicate(Pred), L(LHS), R(RHS) {} template bool match(OpTy *V) { if (auto *I = dyn_cast(V)) { - if (I->getPredicate() == Predicate && L.match(I->getOperand(0)) && - R.match(I->getOperand(1))) + if (CmpPredicate::getMatching(CmpPredicate::get(I), Predicate) && + L.match(I->getOperand(0)) && R.match(I->getOperand(1))) return true; if constexpr (Commutable) { - if (I->getPredicate() == Class::getSwappedPredicate(Predicate) && + if (CmpPredicate::getMatching(CmpPredicate::get(I), + CmpPredicate::getSwapped(Predicate)) && L.match(I->getOperand(1)) && R.match(I->getOperand(0))) return true; } @@ -1653,31 +1652,27 @@ struct SpecificCmpClass_match { }; template -inline SpecificCmpClass_match -m_SpecificCmp(CmpInst::Predicate MatchPred, const LHS &L, const RHS &R) { - return SpecificCmpClass_match( - MatchPred, L, R); +inline SpecificCmpClass_match +m_SpecificCmp(CmpPredicate MatchPred, const LHS &L, const RHS &R) { + return SpecificCmpClass_match(MatchPred, L, R); } template -inline SpecificCmpClass_match -m_SpecificICmp(ICmpInst::Predicate MatchPred, const LHS &L, const RHS &R) { - return SpecificCmpClass_match( - MatchPred, L, R); +inline SpecificCmpClass_match +m_SpecificICmp(CmpPredicate MatchPred, const LHS &L, const RHS &R) { + return SpecificCmpClass_match(MatchPred, L, R); } template -inline SpecificCmpClass_match -m_c_SpecificICmp(ICmpInst::Predicate MatchPred, const LHS &L, const RHS &R) { - return SpecificCmpClass_match( - MatchPred, L, R); +inline SpecificCmpClass_match +m_c_SpecificICmp(CmpPredicate MatchPred, const LHS &L, const RHS &R) { + return SpecificCmpClass_match(MatchPred, L, R); } template -inline SpecificCmpClass_match -m_SpecificFCmp(FCmpInst::Predicate MatchPred, const LHS &L, const RHS &R) { - return SpecificCmpClass_match( - MatchPred, L, R); +inline SpecificCmpClass_match +m_SpecificFCmp(CmpPredicate MatchPred, const LHS &L, const RHS &R) { + return SpecificCmpClass_match(MatchPred, L, R); } //===----------------------------------------------------------------------===// @@ -2468,7 +2463,7 @@ struct UAddWithOverflow_match { template bool match(OpTy *V) { Value *ICmpLHS, *ICmpRHS; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!m_ICmp(Pred, m_Value(ICmpLHS), m_Value(ICmpRHS)).match(V)) return false; @@ -2738,16 +2733,15 @@ inline AnyBinaryOp_match m_c_BinOp(const LHS &L, const RHS &R) { /// Matches an ICmp with a predicate over LHS and RHS in either order. /// Swaps the predicate if operands are commuted. template -inline CmpClass_match -m_c_ICmp(ICmpInst::Predicate &Pred, const LHS &L, const RHS &R) { - return CmpClass_match(Pred, L, - R); +inline CmpClass_match +m_c_ICmp(CmpPredicate &Pred, const LHS &L, const RHS &R) { + return CmpClass_match(Pred, L, R); } template -inline CmpClass_match -m_c_ICmp(const LHS &L, const RHS &R) { - return CmpClass_match(L, R); +inline CmpClass_match m_c_ICmp(const LHS &L, + const RHS &R) { + return CmpClass_match(L, R); } /// Matches a specific opcode with LHS and RHS in either order. diff --git a/llvm/lib/Analysis/IVDescriptors.cpp b/llvm/lib/Analysis/IVDescriptors.cpp index 76a78d522965..f74ede4450ce 100644 --- a/llvm/lib/Analysis/IVDescriptors.cpp +++ b/llvm/lib/Analysis/IVDescriptors.cpp @@ -630,7 +630,7 @@ RecurrenceDescriptor::isAnyOfPattern(Loop *Loop, PHINode *OrigPhi, Instruction *I, InstDesc &Prev) { // We must handle the select(cmp(),x,y) as a single instruction. Advance to // the select. - CmpInst::Predicate Pred; + CmpPredicate Pred; if (match(I, m_OneUse(m_Cmp(Pred, m_Value(), m_Value())))) { if (auto *Select = dyn_cast(*I->user_begin())) return InstDesc(Select, Prev.getRecKind()); @@ -759,7 +759,7 @@ RecurrenceDescriptor::isMinMaxPattern(Instruction *I, RecurKind Kind, // We must handle the select(cmp()) as a single instruction. Advance to the // select. - CmpInst::Predicate Pred; + CmpPredicate Pred; if (match(I, m_OneUse(m_Cmp(Pred, m_Value(), m_Value())))) { if (auto *Select = dyn_cast(*I->user_begin())) return InstDesc(Select, Prev.getRecKind()); diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 62edea38745b..3325cd972cf1 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -1500,12 +1500,12 @@ static Value *simplifyUnsignedRangeCheck(ICmpInst *ZeroICmp, const SimplifyQuery &Q) { Value *X, *Y; - ICmpInst::Predicate EqPred; + CmpPredicate EqPred; if (!match(ZeroICmp, m_ICmp(EqPred, m_Value(Y), m_Zero())) || !ICmpInst::isEquality(EqPred)) return nullptr; - ICmpInst::Predicate UnsignedPred; + CmpPredicate UnsignedPred; Value *A, *B; // Y = (A - B); @@ -1644,7 +1644,7 @@ static Value *simplifyAndOrOfICmpsWithConstants(ICmpInst *Cmp0, ICmpInst *Cmp1, static Value *simplifyAndOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1, const InstrInfoQuery &IIQ) { // (icmp (add V, C0), C1) & (icmp V, C0) - ICmpInst::Predicate Pred0, Pred1; + CmpPredicate Pred0, Pred1; const APInt *C0, *C1; Value *V; if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_APInt(C0)), m_APInt(C1)))) @@ -1691,7 +1691,7 @@ static Value *simplifyAndOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1, /// Try to simplify and/or of icmp with ctpop intrinsic. static Value *simplifyAndOrOfICmpsWithCtpop(ICmpInst *Cmp0, ICmpInst *Cmp1, bool IsAnd) { - ICmpInst::Predicate Pred0, Pred1; + CmpPredicate Pred0, Pred1; Value *X; const APInt *C; if (!match(Cmp0, m_ICmp(Pred0, m_Intrinsic(m_Value(X)), @@ -1735,7 +1735,7 @@ static Value *simplifyAndOfICmps(ICmpInst *Op0, ICmpInst *Op1, static Value *simplifyOrOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1, const InstrInfoQuery &IIQ) { // (icmp (add V, C0), C1) | (icmp V, C0) - ICmpInst::Predicate Pred0, Pred1; + CmpPredicate Pred0, Pred1; const APInt *C0, *C1; Value *V; if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_APInt(C0)), m_APInt(C1)))) @@ -1891,7 +1891,7 @@ static Value *simplifyAndOrWithICmpEq(unsigned Opcode, Value *Op0, Value *Op1, unsigned MaxRecurse) { assert((Opcode == Instruction::And || Opcode == Instruction::Or) && "Must be and/or"); - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *A, *B; if (!match(Op0, m_ICmp(Pred, m_Value(A), m_Value(B))) || !ICmpInst::isEquality(Pred)) @@ -4614,7 +4614,7 @@ static Value *simplifySelectWithICmpCond(Value *CondVal, Value *TrueVal, Value *FalseVal, const SimplifyQuery &Q, unsigned MaxRecurse) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *CmpLHS, *CmpRHS; if (!match(CondVal, m_ICmp(Pred, m_Value(CmpLHS), m_Value(CmpRHS)))) return nullptr; @@ -4738,7 +4738,7 @@ static Value *simplifySelectWithICmpCond(Value *CondVal, Value *TrueVal, static Value *simplifySelectWithFCmp(Value *Cond, Value *T, Value *F, const SimplifyQuery &Q, unsigned MaxRecurse) { - FCmpInst::Predicate Pred; + CmpPredicate Pred; Value *CmpLHS, *CmpRHS; if (!match(Cond, m_FCmp(Pred, m_Value(CmpLHS), m_Value(CmpRHS)))) return nullptr; diff --git a/llvm/lib/Analysis/OverflowInstAnalysis.cpp b/llvm/lib/Analysis/OverflowInstAnalysis.cpp index 8bfd6642f760..40f71f4a8db4 100644 --- a/llvm/lib/Analysis/OverflowInstAnalysis.cpp +++ b/llvm/lib/Analysis/OverflowInstAnalysis.cpp @@ -20,7 +20,7 @@ using namespace llvm::PatternMatch; bool llvm::isCheckForZeroAndMulWithOverflow(Value *Op0, Value *Op1, bool IsAnd, Use *&Y) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *X, *NotOp1; int XIdx; IntrinsicInst *II; diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index c148dbce92d1..a43f5b6cec2f 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -259,7 +259,7 @@ bool llvm::isOnlyUsedInZeroComparison(const Instruction *I) { bool llvm::isOnlyUsedInZeroEqualityComparison(const Instruction *I) { return !I->user_empty() && all_of(I->users(), [](const User *U) { - ICmpInst::Predicate P; + CmpPredicate P; return match(U, m_ICmp(P, m_Value(), m_Zero())) && ICmpInst::isEquality(P); }); } @@ -614,7 +614,7 @@ static bool isKnownNonZeroFromAssume(const Value *V, const SimplifyQuery &Q) { // runtime of ~O(#assumes * #values). Value *RHS; - CmpInst::Predicate Pred; + CmpPredicate Pred; auto m_V = m_CombineOr(m_Specific(V), m_PtrToInt(m_Specific(V))); if (!match(I->getArgOperand(0), m_c_ICmp(Pred, m_V, m_Value(RHS)))) continue; @@ -1602,7 +1602,7 @@ static void computeKnownBitsFromOperator(const Operator *I, // See if we can further use a conditional branch into the phi // to help us determine the range of the value. if (!Known2.isConstant()) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *RHSC; BasicBlock *TrueSucc, *FalseSucc; // TODO: Use RHS Value and compute range from its known bits. @@ -2255,7 +2255,7 @@ static bool isPowerOfTwoRecurrence(const PHINode *PN, bool OrZero, static bool isImpliedToBeAPowerOfTwoFromCond(const Value *V, bool OrZero, const Value *Cond, bool CondIsTrue) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *RHSC; if (!match(Cond, m_ICmp(Pred, m_Intrinsic(m_Specific(V)), m_APInt(RHSC)))) @@ -2580,7 +2580,7 @@ static bool isKnownNonNullFromDominatingCondition(const Value *V, // Consider only compare instructions uniquely controlling a branch Value *RHS; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(U, m_c_ICmp(Pred, m_Specific(V), m_Value(RHS)))) continue; @@ -3009,7 +3009,7 @@ static bool isKnownNonZeroFromOperator(const Operator *I, // The condition of the select dominates the true/false arm. Check if the // condition implies that a given arm is non-zero. Value *X; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(I->getOperand(0), m_c_ICmp(Pred, m_Specific(Op), m_Value(X)))) return false; @@ -3037,7 +3037,7 @@ static bool isKnownNonZeroFromOperator(const Operator *I, return true; RecQ.CxtI = PN->getIncomingBlock(U)->getTerminator(); // Check if the branch on the phi excludes zero. - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *X; BasicBlock *TrueSucc, *FalseSucc; if (match(RecQ.CxtI, @@ -4895,7 +4895,7 @@ static void computeKnownFPClassFromCond(const Value *V, Value *Cond, KnownFromContext); return; } - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *LHS; uint64_t ClassVal = 0; const APFloat *CRHS; @@ -5135,7 +5135,7 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts, FPClassTest MaskIfFalse = fcAllFlags; uint64_t ClassVal = 0; const Function *F = cast(Op)->getFunction(); - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *CmpLHS, *CmpRHS; if (F && match(Cond, m_FCmp(Pred, m_Value(CmpLHS), m_Value(CmpRHS)))) { // If the select filters out a value based on the class, it no longer @@ -8571,7 +8571,7 @@ bool llvm::isKnownNegation(const Value *X, const Value *Y, bool NeedNSW, bool llvm::isKnownInversion(const Value *X, const Value *Y) { // Handle X = icmp pred A, B, Y = icmp pred A, C. Value *A, *B, *C; - ICmpInst::Predicate Pred1, Pred2; + CmpPredicate Pred1, Pred2; if (!match(X, m_ICmp(Pred1, m_Value(A), m_Value(B))) || !match(Y, m_c_ICmp(Pred2, m_Specific(A), m_Value(C)))) return false; @@ -10054,7 +10054,7 @@ void llvm::findValuesAffectedByCondition( if (!Visited.insert(V).second) continue; - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *A, *B, *X; if (IsAssume) { diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 83c6ecd40103..5c712e4f007d 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -1885,7 +1885,7 @@ static bool foldICmpWithDominatingICmp(CmpInst *Cmp, return false; Value *CmpOp0 = Cmp->getOperand(0), *CmpOp1 = Cmp->getOperand(1); - ICmpInst::Predicate DomPred; + CmpPredicate DomPred; if (!match(DomCond, m_ICmp(DomPred, m_Specific(CmpOp0), m_Specific(CmpOp1)))) return false; if (DomPred != ICmpInst::ICMP_SGT && DomPred != ICmpInst::ICMP_SLT) @@ -2155,7 +2155,7 @@ bool CodeGenPrepare::optimizeURem(Instruction *Rem) { static bool adjustIsPower2Test(CmpInst *Cmp, const TargetLowering &TLI, const TargetTransformInfo &TTI, const DataLayout &DL) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(Cmp, m_ICmp(Pred, m_Intrinsic(), m_One()))) return false; if (!ICmpInst::isEquality(Pred)) diff --git a/llvm/lib/CodeGen/ExpandMemCmp.cpp b/llvm/lib/CodeGen/ExpandMemCmp.cpp index a1acb4ef3683..f8ca7e370f6e 100644 --- a/llvm/lib/CodeGen/ExpandMemCmp.cpp +++ b/llvm/lib/CodeGen/ExpandMemCmp.cpp @@ -668,7 +668,7 @@ Value *MemCmpExpansion::getMemCmpOneBlock() { // We can generate more optimal code with a smaller number of operations if (CI->hasOneUser()) { auto *UI = cast(*CI->user_begin()); - ICmpInst::Predicate Pred = ICmpInst::Predicate::BAD_ICMP_PREDICATE; + CmpPredicate Pred = ICmpInst::Predicate::BAD_ICMP_PREDICATE; uint64_t Shift; bool NeedsZExt = false; // This is a special case because instead of checking if the result is less diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index 4f07a4c4dd01..d1da02c744f1 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -3932,6 +3932,24 @@ std::optional CmpPredicate::getMatching(CmpPredicate A, return {}; } +CmpPredicate CmpPredicate::get(const CmpInst *Cmp) { + if (auto *ICI = dyn_cast(Cmp)) + return ICI->getCmpPredicate(); + return Cmp->getPredicate(); +} + +CmpPredicate CmpPredicate::getSwapped(CmpPredicate P) { + return {CmpInst::getSwappedPredicate(P), P.hasSameSign()}; +} + +CmpPredicate CmpPredicate::getSwapped(const CmpInst *Cmp) { + return getSwapped(get(Cmp)); +} + +hash_code llvm::hash_value(const CmpPredicate &Arg) { // NOLINT + return hash_combine(Arg.Pred, Arg.HasSameSign); +} + //===----------------------------------------------------------------------===// // SwitchInst Implementation //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp index 850a1c3bfca4..6c2e04c3f8a7 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -3647,7 +3647,7 @@ InstructionCost AArch64TTIImpl::getCmpSelInstrCost( // If VecPred is not set, check if we can get a predicate from the context // instruction, if its type matches the requested ValTy. if (VecPred == CmpInst::BAD_ICMP_PREDICATE && I && I->getType() == ValTy) { - CmpInst::Predicate CurrentPred; + CmpPredicate CurrentPred; if (match(I, m_Select(m_Cmp(CurrentPred, m_Value(), m_Value()), m_Value(), m_Value()))) VecPred = CurrentPred; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp index e02ef56f2344..e844904ebd1e 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp @@ -1707,7 +1707,7 @@ bool AMDGPUCodeGenPrepareImpl::visitSelectInst(SelectInst &I) { Value *TrueVal = I.getTrueValue(); Value *FalseVal = I.getFalseValue(); Value *CmpVal; - FCmpInst::Predicate Pred; + CmpPredicate Pred; if (ST.has16BitInsts() && needsPromotionToI32(I.getType())) { if (UA.isUniform(&I)) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp index 41b33ac8a7eb..8b1b39860658 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp @@ -960,7 +960,7 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const { return &II; } - CmpInst::Predicate SrcPred; + CmpPredicate SrcPred; Value *SrcLHS; Value *SrcRHS; diff --git a/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp b/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp index 705e1f43851f..46a8ab395d32 100644 --- a/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp +++ b/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp @@ -695,7 +695,7 @@ bool PolynomialMultiplyRecognize::matchLeftShift(SelectInst *SelI, using namespace PatternMatch; - CmpInst::Predicate P; + CmpPredicate P; Value *A = nullptr, *B = nullptr, *C = nullptr; if (!match(CondV, m_ICmp(P, m_And(m_Value(A), m_Value(B)), m_Value(C))) && @@ -810,7 +810,7 @@ bool PolynomialMultiplyRecognize::matchRightShift(SelectInst *SelI, using namespace PatternMatch; Value *C = nullptr; - CmpInst::Predicate P; + CmpPredicate P; bool TrueIfZero; if (match(CondV, m_c_ICmp(P, m_Value(C), m_Zero()))) { diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index beb4f3cae55a..290c41a5bf03 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -31477,7 +31477,7 @@ static bool shouldExpandCmpArithRMWInIR(AtomicRMWInst *AI) { return false; Value *Op = AI->getOperand(1); - ICmpInst::Predicate Pred; + CmpPredicate Pred; Instruction *I = AI->user_back(); AtomicRMWInst::BinOp Opc = AI->getOperation(); if (Opc == AtomicRMWInst::Add) { diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index fe0d88fcc6ee..7a184a19d7c5 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -1289,7 +1289,7 @@ static Instruction *foldAddToAshr(BinaryOperator &Add) { // Note that, by the time we end up here, if possible, ugt has been // canonicalized into eq. const APInt *MaskC, *MaskCCmp; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(Add.getOperand(1), m_SExt(m_ICmp(Pred, m_And(m_Specific(X), m_APInt(MaskC)), m_APInt(MaskCCmp))))) @@ -1382,7 +1382,7 @@ Instruction *InstCombinerImpl:: // `select` itself may be appropriately extended, look past that. SkipExtInMagic(Select); - ICmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *Thr; Value *SignExtendingValue, *Zero; bool ShouldSignext; @@ -1654,7 +1654,7 @@ Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { return replaceInstUsesWith(I, Constant::getNullValue(I.getType())); // sext(A < B) + zext(A > B) => ucmp/scmp(A, B) - ICmpInst::Predicate LTPred, GTPred; + CmpPredicate LTPred, GTPred; if (match(&I, m_c_Add(m_SExt(m_c_ICmp(LTPred, m_Value(A), m_Value(B))), m_ZExt(m_c_ICmp(GTPred, m_Deferred(A), m_Deferred(B))))) && @@ -1841,7 +1841,7 @@ Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { // --> // BW - ctlz(A - 1, false) const APInt *XorC; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (match(&I, m_c_Add( m_ZExt(m_ICmp(Pred, m_Intrinsic(m_Value(A)), diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index 314b1f0b43e3..dff9304be64d 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -738,7 +738,7 @@ static Value * foldAndOrOfICmpsWithPow2AndWithZero(InstCombiner::BuilderTy &Builder, ICmpInst *LHS, ICmpInst *RHS, bool IsAnd, const SimplifyQuery &Q) { - CmpInst::Predicate Pred = IsAnd ? CmpInst::ICMP_NE : CmpInst::ICMP_EQ; + CmpPredicate Pred = IsAnd ? CmpInst::ICMP_NE : CmpInst::ICMP_EQ; // Make sure we have right compares for our op. if (LHS->getPredicate() != Pred || RHS->getPredicate() != Pred) return nullptr; @@ -875,7 +875,7 @@ static Value *foldSignedTruncationCheck(ICmpInst *ICmp0, ICmpInst *ICmp1, // Try to match/decompose into: icmp eq (X & Mask), 0 auto tryToDecompose = [](ICmpInst *ICmp, Value *&X, APInt &UnsetBitsMask) -> bool { - CmpInst::Predicate Pred = ICmp->getPredicate(); + CmpPredicate Pred = ICmp->getPredicate(); // Can it be decomposed into icmp eq (X & Mask), 0 ? auto Res = llvm::decomposeBitTestICmp(ICmp->getOperand(0), ICmp->getOperand(1), @@ -944,7 +944,7 @@ static Value *foldSignedTruncationCheck(ICmpInst *ICmp0, ICmpInst *ICmp1, static Value *foldIsPowerOf2OrZero(ICmpInst *Cmp0, ICmpInst *Cmp1, bool IsAnd, InstCombiner::BuilderTy &Builder, InstCombinerImpl &IC) { - CmpInst::Predicate Pred0, Pred1; + CmpPredicate Pred0, Pred1; Value *X; if (!match(Cmp0, m_ICmp(Pred0, m_Intrinsic(m_Value(X)), m_SpecificInt(1))) || @@ -1117,12 +1117,12 @@ static Value *foldUnsignedUnderflowCheck(ICmpInst *ZeroICmp, const SimplifyQuery &Q, InstCombiner::BuilderTy &Builder) { Value *ZeroCmpOp; - ICmpInst::Predicate EqPred; + CmpPredicate EqPred; if (!match(ZeroICmp, m_ICmp(EqPred, m_Value(ZeroCmpOp), m_Zero())) || !ICmpInst::isEquality(EqPred)) return nullptr; - ICmpInst::Predicate UnsignedPred; + CmpPredicate UnsignedPred; Value *A, *B; if (match(UnsignedICmp, @@ -1281,7 +1281,7 @@ static Value *foldAndOrOfICmpsWithConstEq(ICmpInst *Cmp0, ICmpInst *Cmp1, const SimplifyQuery &Q) { // Match an equality compare with a non-poison constant as Cmp0. // Also, give up if the compare can be constant-folded to avoid looping. - ICmpInst::Predicate Pred0; + CmpPredicate Pred0; Value *X; Constant *C; if (!match(Cmp0, m_ICmp(Pred0, m_Value(X), m_Constant(C))) || @@ -1295,7 +1295,7 @@ static Value *foldAndOrOfICmpsWithConstEq(ICmpInst *Cmp0, ICmpInst *Cmp1, // common operand as operand 1 (Pred1 is swapped if the common operand was // operand 0). Value *Y; - ICmpInst::Predicate Pred1; + CmpPredicate Pred1; if (!match(Cmp1, m_c_ICmp(Pred1, m_Value(Y), m_Specific(X)))) return nullptr; @@ -1326,7 +1326,7 @@ static Value *foldAndOrOfICmpsWithConstEq(ICmpInst *Cmp0, ICmpInst *Cmp1, Value *InstCombinerImpl::foldAndOrOfICmpsUsingRanges(ICmpInst *ICmp1, ICmpInst *ICmp2, bool IsAnd) { - ICmpInst::Predicate Pred1, Pred2; + CmpPredicate Pred1, Pred2; Value *V1, *V2; const APInt *C1, *C2; if (!match(ICmp1, m_ICmp(Pred1, m_Value(V1), m_APInt(C1))) || @@ -1348,12 +1348,12 @@ Value *InstCombinerImpl::foldAndOrOfICmpsUsingRanges(ICmpInst *ICmp1, return nullptr; ConstantRange CR1 = ConstantRange::makeExactICmpRegion( - IsAnd ? ICmpInst::getInversePredicate(Pred1) : Pred1, *C1); + IsAnd ? ICmpInst::getInverseCmpPredicate(Pred1) : Pred1, *C1); if (Offset1) CR1 = CR1.subtract(*Offset1); ConstantRange CR2 = ConstantRange::makeExactICmpRegion( - IsAnd ? ICmpInst::getInversePredicate(Pred2) : Pred2, *C2); + IsAnd ? ICmpInst::getInverseCmpPredicate(Pred2) : Pred2, *C2); if (Offset2) CR2 = CR2.subtract(*Offset2); @@ -3943,7 +3943,7 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) { canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract(I)) return V; - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *Mul, *Ov, *MulIsNotZero, *UMulWithOv; // Check if the OR weakens the overflow condition for umul.with.overflow by // treating any non-zero result as overflow. In that case, we overflow if both @@ -4608,7 +4608,7 @@ Instruction *InstCombinerImpl::foldNot(BinaryOperator &I) { } // not (cmp A, B) = !cmp A, B - CmpInst::Predicate Pred; + CmpPredicate Pred; if (match(NotOp, m_Cmp(Pred, m_Value(), m_Value())) && (NotOp->hasOneUse() || InstCombiner::canFreelyInvertAllUsersOf(cast(NotOp), diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index 54053c4c9e28..d6fdade25559 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -1173,7 +1173,7 @@ Instruction *InstCombinerImpl::foldIRemByPowerOfTwoToBitTest(ICmpInst &I) { // This fold is only valid for equality predicates. if (!I.isEquality()) return nullptr; - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *X, *Y, *Zero; if (!match(&I, m_ICmp(Pred, m_OneUse(m_IRem(m_Value(X), m_Value(Y))), m_CombineAnd(m_Zero(), m_Value(Zero))))) @@ -1190,7 +1190,7 @@ Instruction *InstCombinerImpl::foldIRemByPowerOfTwoToBitTest(ICmpInst &I) { /// by one-less-than-bitwidth into a sign test on the original value. Instruction *InstCombinerImpl::foldSignBitTest(ICmpInst &I) { Instruction *Val; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!I.isEquality() || !match(&I, m_ICmp(Pred, m_Instruction(Val), m_Zero()))) return nullptr; @@ -1404,7 +1404,7 @@ Instruction *InstCombinerImpl::foldICmpWithDominatingICmp(ICmpInst &Cmp) { }; for (BranchInst *BI : DC.conditionsFor(X)) { - ICmpInst::Predicate DomPred; + CmpPredicate DomPred; const APInt *DomC; if (!match(BI->getCondition(), m_ICmp(DomPred, m_Specific(X), m_APInt(DomC)))) @@ -1517,7 +1517,7 @@ Instruction * InstCombinerImpl::foldICmpTruncWithTruncOrExt(ICmpInst &Cmp, const SimplifyQuery &Q) { Value *X, *Y; - ICmpInst::Predicate Pred; + CmpPredicate Pred; bool YIsSExt = false; // Try to match icmp (trunc X), (trunc Y) if (match(&Cmp, m_ICmp(Pred, m_Trunc(m_Value(X)), m_Trunc(m_Value(Y))))) { @@ -3249,7 +3249,7 @@ bool InstCombinerImpl::matchThreeWayIntCompare(SelectInst *SI, Value *&LHS, // i32 Equal, // i32 (select i1 (a < b), i32 Less, i32 Greater) // where Equal, Less and Greater are placeholders for any three constants. - ICmpInst::Predicate PredA; + CmpPredicate PredA; if (!match(SI->getCondition(), m_ICmp(PredA, m_Value(LHS), m_Value(RHS))) || !ICmpInst::isEquality(PredA)) return false; @@ -3260,7 +3260,7 @@ bool InstCombinerImpl::matchThreeWayIntCompare(SelectInst *SI, Value *&LHS, std::swap(EqualVal, UnequalVal); if (!match(EqualVal, m_ConstantInt(Equal))) return false; - ICmpInst::Predicate PredB; + CmpPredicate PredB; Value *LHS2, *RHS2; if (!match(UnequalVal, m_Select(m_ICmp(PredB, m_Value(LHS2), m_Value(RHS2)), m_ConstantInt(Less), m_ConstantInt(Greater)))) @@ -4565,7 +4565,7 @@ static Value *foldICmpWithLowBitMaskedVal(CmpPredicate Pred, Value *Op0, static Value * foldICmpWithTruncSignExtendedVal(ICmpInst &I, InstCombiner::BuilderTy &Builder) { - ICmpInst::Predicate SrcPred; + CmpPredicate SrcPred; Value *X; const APInt *C0, *C1; // FIXME: non-splats, potentially with undef. // We are ok with 'shl' having multiple uses, but 'ashr' must be one-use. @@ -4811,7 +4811,7 @@ foldShiftIntoShiftInAnotherHandOfAndInICmp(ICmpInst &I, const SimplifyQuery SQ, /// Note that the comparison is commutative, while inverted (u>=, ==) predicate /// will mean that we are looking for the opposite answer. Value *InstCombinerImpl::foldMultiplicationOverflowCheck(ICmpInst &I) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *X, *Y; Instruction *Mul; Instruction *Div; @@ -4881,7 +4881,7 @@ Value *InstCombinerImpl::foldMultiplicationOverflowCheck(ICmpInst &I) { static Instruction *foldICmpXNegX(ICmpInst &I, InstCombiner::BuilderTy &Builder) { - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *X; if (match(&I, m_c_ICmp(Pred, m_NSWNeg(m_Value(X)), m_Deferred(X)))) { @@ -6822,7 +6822,7 @@ Instruction *InstCombinerImpl::foldICmpUsingKnownBits(ICmpInst &I) { /// then try to reduce patterns based on that limit. Instruction *InstCombinerImpl::foldICmpUsingBoolRange(ICmpInst &I) { Value *X, *Y; - ICmpInst::Predicate Pred; + CmpPredicate Pred; // X must be 0 and bool must be true for "ULT": // X (X == 0) & Y @@ -6837,7 +6837,7 @@ Instruction *InstCombinerImpl::foldICmpUsingBoolRange(ICmpInst &I) { return BinaryOperator::CreateOr(Builder.CreateIsNull(X), Y); // icmp eq/ne X, (zext/sext (icmp eq/ne X, C)) - ICmpInst::Predicate Pred1, Pred2; + CmpPredicate Pred1, Pred2; const APInt *C; Instruction *ExtI; if (match(&I, m_c_ICmp(Pred1, m_Value(X), @@ -7107,7 +7107,7 @@ static Instruction *canonicalizeICmpBool(ICmpInst &I, // (X l>> Y) == 0 static Instruction *foldICmpWithHighBitMask(ICmpInst &Cmp, InstCombiner::BuilderTy &Builder) { - ICmpInst::Predicate Pred, NewPred; + CmpPredicate Pred, NewPred; Value *X, *Y; if (match(&Cmp, m_c_ICmp(Pred, m_OneUse(m_Shl(m_One(), m_Value(Y))), m_Value(X)))) { @@ -7272,7 +7272,7 @@ static Instruction *foldReductionIdiom(ICmpInst &I, const DataLayout &DL) { if (I.getType()->isVectorTy()) return nullptr; - ICmpInst::Predicate OuterPred, InnerPred; + CmpPredicate OuterPred, InnerPred; Value *LHS, *RHS; // Match lowering of @llvm.vector.reduce.and. Turn diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp index c7a0c35d099c..50dfb58cadb1 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -58,7 +58,7 @@ static Instruction *foldSelectBinOpIdentity(SelectInst &Sel, // The select condition must be an equality compare with a constant operand. Value *X; Constant *C; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(Sel.getCondition(), m_Cmp(Pred, m_Value(X), m_Constant(C)))) return nullptr; @@ -425,17 +425,19 @@ Instruction *InstCombinerImpl::foldSelectOpOp(SelectInst &SI, Instruction *TI, // icmp with a common operand also can have the common operand // pulled after the select. - ICmpInst::Predicate TPred, FPred; + CmpPredicate TPred, FPred; if (match(TI, m_ICmp(TPred, m_Value(), m_Value())) && match(FI, m_ICmp(FPred, m_Value(), m_Value()))) { - if (TPred == FPred || TPred == CmpInst::getSwappedPredicate(FPred)) { - bool Swapped = TPred != FPred; + // FIXME: Use CmpPredicate::getMatching here. + CmpInst::Predicate T = TPred, F = FPred; + if (T == F || T == ICmpInst::getSwappedCmpPredicate(F)) { + bool Swapped = T != F; if (Value *MatchOp = getCommonOp(TI, FI, ICmpInst::isEquality(TPred), Swapped)) { Value *NewSel = Builder.CreateSelect(Cond, OtherOpT, OtherOpF, SI.getName() + ".v", &SI); return new ICmpInst( - MatchIsOpZero ? TPred : CmpInst::getSwappedPredicate(TPred), + MatchIsOpZero ? TPred : ICmpInst::getSwappedCmpPredicate(TPred), MatchOp, NewSel); } } @@ -640,7 +642,7 @@ static Instruction *foldSelectICmpAndAnd(Type *SelType, const ICmpInst *Cmp, static Value *foldSelectICmpAndZeroShl(const ICmpInst *Cmp, Value *TVal, Value *FVal, InstCombiner::BuilderTy &Builder) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *AndVal; if (!match(Cmp, m_ICmp(Pred, m_Value(AndVal), m_Zero()))) return nullptr; @@ -867,7 +869,7 @@ static Instruction *foldSelectZeroOrMul(SelectInst &SI, InstCombinerImpl &IC) { auto *TrueVal = SI.getTrueValue(); auto *FalseVal = SI.getFalseValue(); Value *X, *Y; - ICmpInst::Predicate Predicate; + CmpPredicate Predicate; // Assuming that constant compared with zero is not undef (but it may be // a vector with some undef elements). Otherwise (when a constant is undef) @@ -1527,7 +1529,7 @@ static Value *canonicalizeClampLike(SelectInst &Sel0, ICmpInst &Cmp0, return nullptr; Value *Cmp1; - ICmpInst::Predicate Pred1; + CmpPredicate Pred1; Constant *C2; Value *ReplacementLow, *ReplacementHigh; if (!match(Sel1, m_Select(m_Value(Cmp1), m_Value(ReplacementLow), @@ -1636,7 +1638,7 @@ static Value *canonicalizeClampLike(SelectInst &Sel0, ICmpInst &Cmp0, static Instruction * tryToReuseConstantFromSelectInComparison(SelectInst &Sel, ICmpInst &Cmp, InstCombinerImpl &IC) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *X; Constant *C0; if (!match(&Cmp, m_OneUse(m_ICmp( @@ -1734,7 +1736,7 @@ static Value *foldSelectInstWithICmpConst(SelectInst &SI, ICmpInst *ICI, InstCombiner::BuilderTy &Builder) { const APInt *CmpC; Value *V; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(ICI, m_ICmp(Pred, m_Value(V), m_APInt(CmpC)))) return nullptr; @@ -1890,7 +1892,7 @@ static Value *foldSelectWithConstOpToBinOp(ICmpInst *Cmp, Value *TrueVal, BinaryOperator *BOp; Constant *C1, *C2, *C3; Value *X; - ICmpInst::Predicate Predicate; + CmpPredicate Predicate; if (!match(Cmp, m_ICmp(Predicate, m_Value(X), m_Constant(C1)))) return nullptr; @@ -2138,7 +2140,7 @@ foldOverflowingAddSubSelect(SelectInst &SI, InstCombiner::BuilderTy &Builder) { auto IsSignedSaturateLimit = [&](Value *Limit, bool IsAdd) { Type *Ty = Limit->getType(); - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *TrueVal, *FalseVal, *Op; const APInt *C; if (!match(Limit, m_Select(m_ICmp(Pred, m_Value(Op), m_APInt(C)), @@ -2347,7 +2349,7 @@ static Instruction *foldSelectCmpBitcasts(SelectInst &Sel, Value *TVal = Sel.getTrueValue(); Value *FVal = Sel.getFalseValue(); - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *A, *B; if (!match(Cond, m_Cmp(Pred, m_Value(A), m_Value(B)))) return nullptr; @@ -2552,7 +2554,7 @@ static Instruction *foldSelectToCopysign(SelectInst &Sel, Value *X; const APInt *C; bool IsTrueIfSignSet; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(Cond, m_OneUse(m_ICmp(Pred, m_ElementWiseBitCast(m_Value(X)), m_APInt(C)))) || !isSignBitCheck(Pred, *C, IsTrueIfSignSet) || X->getType() != SelType) @@ -2748,7 +2750,7 @@ static Instruction *foldSelectWithSRem(SelectInst &SI, InstCombinerImpl &IC, Value *TrueVal = SI.getTrueValue(); Value *FalseVal = SI.getFalseValue(); - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *Op, *RemRes, *Remainder; const APInt *C; bool TrueIfSigned = false; @@ -2807,7 +2809,7 @@ static Value *foldSelectWithFrozenICmp(SelectInst &Sel, InstCombiner::BuilderTy // a = select c, x, y ; // f(a, c) ; f(poison, 1) cannot happen, but if a is folded // ; to y, this can happen. - CmpInst::Predicate Pred; + CmpPredicate Pred; if (FI->hasOneUse() && match(Cond, m_c_ICmp(Pred, m_Specific(TrueVal), m_Specific(FalseVal))) && (Pred == ICmpInst::ICMP_EQ || Pred == ICmpInst::ICMP_NE)) { @@ -2856,7 +2858,7 @@ static Instruction *foldSelectWithFCmpToFabs(SelectInst &SI, for (bool Swap : {false, true}) { Value *TrueVal = SI.getTrueValue(); Value *X = SI.getFalseValue(); - CmpInst::Predicate Pred; + CmpPredicate Pred; if (Swap) std::swap(TrueVal, X); @@ -2936,7 +2938,7 @@ static Instruction *foldSelectWithFCmpToFabs(SelectInst &SI, if (Swap) std::swap(TrueVal, X); - CmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *C; bool TrueIfSigned; if (!match(CondVal, @@ -2980,7 +2982,7 @@ foldRoundUpIntegerWithPow2Alignment(SelectInst &SI, Value *X = SI.getTrueValue(); Value *XBiasedHighBits = SI.getFalseValue(); - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *XLowBits; if (!match(Cond, m_ICmp(Pred, m_Value(XLowBits), m_ZeroInt())) || !ICmpInst::isEquality(Pred)) @@ -3159,7 +3161,7 @@ static bool impliesPoisonOrCond(const Value *ValAssumedPoison, const Value *V, Value *LHS = ICmp->getOperand(0); const APInt *RHSC1; const APInt *RHSC2; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (ICmp->hasSameSign() && match(ICmp->getOperand(1), m_APIntForbidPoison(RHSC1)) && match(V, m_ICmp(Pred, m_Specific(LHS), m_APIntAllowPoison(RHSC2)))) { @@ -3170,7 +3172,7 @@ static bool impliesPoisonOrCond(const Value *ValAssumedPoison, const Value *V, APInt::getZero(BitWidth)) : ConstantRange(APInt::getZero(BitWidth), APInt::getSignedMinValue(BitWidth)); - return CRX.icmp(Expected ? Pred : ICmpInst::getInversePredicate(Pred), + return CRX.icmp(Expected ? Pred : ICmpInst::getInverseCmpPredicate(Pred), *RHSC2); } } @@ -3539,7 +3541,7 @@ static Instruction *foldBitCeil(SelectInst &SI, IRBuilderBase &Builder, Value *FalseVal = SI.getFalseValue(); Value *TrueVal = SI.getTrueValue(); - ICmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *Cond1; Value *Cond0, *Ctlz, *CtlzOp; if (!match(SI.getCondition(), m_ICmp(Pred, m_Value(Cond0), m_APInt(Cond1)))) @@ -3590,7 +3592,7 @@ Instruction *InstCombinerImpl::foldSelectToCmp(SelectInst &SI) { Value *TV = SI.getTrueValue(); Value *FV = SI.getFalseValue(); - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *LHS, *RHS; if (!match(SI.getCondition(), m_ICmp(Pred, m_Value(LHS), m_Value(RHS)))) return nullptr; @@ -3610,7 +3612,7 @@ Instruction *InstCombinerImpl::foldSelectToCmp(SelectInst &SI) { bool IsSigned = ICmpInst::isSigned(Pred); bool Replace = false; - ICmpInst::Predicate ExtendedCmpPredicate; + CmpPredicate ExtendedCmpPredicate; // (x < y) ? -1 : zext(x != y) // (x < y) ? -1 : zext(x > y) if (ICmpInst::isLT(Pred) && match(TV, m_AllOnes()) && @@ -3630,7 +3632,7 @@ Instruction *InstCombinerImpl::foldSelectToCmp(SelectInst &SI) { Replace = true; // (x == y) ? 0 : (x > y ? 1 : -1) - ICmpInst::Predicate FalseBranchSelectPredicate; + CmpPredicate FalseBranchSelectPredicate; const APInt *InnerTV, *InnerFV; if (Pred == ICmpInst::ICMP_EQ && match(TV, m_Zero()) && match(FV, m_Select(m_c_ICmp(FalseBranchSelectPredicate, m_Specific(LHS), @@ -3730,7 +3732,7 @@ static Value *foldSelectIntoAddConstant(SelectInst &SI, Instruction *FAdd; Constant *C; Value *X, *Z; - CmpInst::Predicate Pred; + CmpPredicate Pred; // Note: OneUse check for `Cmp` is necessary because it makes sure that other // InstCombine folds don't undo this transformation and cause an infinite diff --git a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp index 302968f88cc2..ce6154fd610e 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp @@ -86,7 +86,7 @@ static bool cheapToScalarize(Value *V, Value *EI) { if (cheapToScalarize(V0, EI) || cheapToScalarize(V1, EI)) return true; - CmpInst::Predicate UnusedPred; + CmpPredicate UnusedPred; if (match(V, m_OneUse(m_Cmp(UnusedPred, m_Value(V0), m_Value(V1))))) if (cheapToScalarize(V0, EI) || cheapToScalarize(V1, EI)) return true; @@ -486,7 +486,7 @@ Instruction *InstCombinerImpl::visitExtractElementInst(ExtractElementInst &EI) { } Value *X, *Y; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (match(SrcVec, m_Cmp(Pred, m_Value(X), m_Value(Y))) && cheapToScalarize(SrcVec, Index)) { // extelt (cmp X, Y), Index --> cmp (extelt X, Index), (extelt Y, Index) diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index af537da8fa27..20fc335a85ce 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -3490,7 +3490,7 @@ static Instruction *tryToMoveFreeBeforeNullTest(CallInst &FI, // Validate the rest of constraint #1 by matching on the pred branch. Instruction *TI = PredBB->getTerminator(); BasicBlock *TrueBB, *FalseBB; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(TI, m_Br(m_ICmp(Pred, m_CombineOr(m_Specific(Op), m_Specific(Op->stripPointerCasts())), @@ -3771,7 +3771,7 @@ Instruction *InstCombinerImpl::visitBranchInst(BranchInst &BI) { return replaceOperand(BI, 0, ConstantInt::getFalse(Cond->getType())); // Canonicalize, for example, fcmp_one -> fcmp_oeq. - CmpInst::Predicate Pred; + CmpPredicate Pred; if (match(Cond, m_OneUse(m_FCmp(Pred, m_Value(), m_Value()))) && !isCanonicalPredicate(Pred)) { // Swap destinations and condition. @@ -3832,7 +3832,7 @@ static Value *simplifySwitchOnSelectUsingRanges(SwitchInst &SI, if (CstBB != SI.getDefaultDest()) return nullptr; Value *X = Select->getOperand(3 - CstOpIdx); - ICmpInst::Predicate Pred; + CmpPredicate Pred; const APInt *RHSC; if (!match(Select->getCondition(), m_ICmp(Pred, m_Specific(X), m_APInt(RHSC)))) diff --git a/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp b/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp index b8571ba07489..bbc7a005b9ff 100644 --- a/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp +++ b/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp @@ -132,7 +132,7 @@ static void recordCondition(CallBase &CB, BasicBlock *From, BasicBlock *To, if (!BI || !BI->isConditional()) return; - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *Cond = BI->getCondition(); if (!match(Cond, m_ICmp(Pred, m_Value(), m_Constant()))) return; @@ -142,7 +142,7 @@ static void recordCondition(CallBase &CB, BasicBlock *From, BasicBlock *To, if (isCondRelevantToAnyCallArgument(Cmp, CB)) Conditions.push_back({Cmp, From->getTerminator()->getSuccessor(0) == To ? Pred - : Cmp->getInversePredicate()}); + : Cmp->getInverseCmpPredicate()}); } /// Record ICmp conditions relevant to any argument in CB following Pred's diff --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp index e64fc153cf3d..589bfd05bb5d 100644 --- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp +++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp @@ -922,7 +922,7 @@ void State::addInfoForInductions(BasicBlock &BB) { Value *A; Value *B; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(BB.getTerminator(), m_Br(m_ICmp(Pred, m_Value(A), m_Value(B)), m_Value(), m_Value()))) @@ -1089,7 +1089,7 @@ void State::addInfoFor(BasicBlock &BB) { switch (ID) { case Intrinsic::assume: { Value *A, *B; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(I.getOperand(0), m_ICmp(Pred, m_Value(A), m_Value(B)))) break; if (GuaranteedToExecute) { @@ -1537,7 +1537,7 @@ static bool checkOrAndOpImpliedByOther( while (!Worklist.empty()) { Value *Val = Worklist.pop_back_val(); Value *LHS, *RHS; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (match(Val, m_ICmp(Pred, m_Value(LHS), m_Value(RHS)))) { // For OR, check if the negated condition implies CmpToCheck. if (IsOr) @@ -1833,7 +1833,7 @@ static bool eliminateConstraints(Function &F, DominatorTree &DT, LoopInfo &LI, } }; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!CB.isConditionFact()) { Value *X; if (match(CB.Inst, m_Intrinsic(m_Value(X)))) { diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp index 09e8301b772d..4799640089fa 100644 --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -2053,7 +2053,7 @@ struct DSEState { return false; Instruction *ICmpL; - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(BI->getCondition(), m_c_ICmp(Pred, m_CombineAnd(m_Load(m_Specific(StorePtr)), diff --git a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp index cd4846e00603..682c5c3d8c63 100644 --- a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp +++ b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp @@ -192,7 +192,7 @@ static bool matchSelectWithOptionalNotCond(Value *V, Value *&Cond, Value *&A, // mechanism that may remove flags to increase the likelihood of CSE. Flavor = SPF_UNKNOWN; - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(Cond, m_ICmp(Pred, m_Specific(A), m_Specific(B)))) { // Check for commuted variants of min/max by swapping predicate. @@ -279,7 +279,7 @@ static unsigned getHashValueImpl(SimpleValue Val) { // Hash general selects to allow matching commuted true/false operands. // If we do not have a compare as the condition, just hash in the condition. - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *X, *Y; if (!match(Cond, m_Cmp(Pred, m_Value(X), m_Value(Y)))) return hash_combine(Inst->getOpcode(), Cond, A, B); @@ -451,7 +451,7 @@ static bool isEqualImpl(SimpleValue LHS, SimpleValue RHS) { // this code, as we simplify the double-negation before hashing the second // select (and so still succeed at CSEing them). if (LHSA == RHSB && LHSB == RHSA) { - CmpInst::Predicate PredL, PredR; + CmpPredicate PredL, PredR; Value *X, *Y; if (match(CondL, m_Cmp(PredL, m_Value(X), m_Value(Y))) && match(CondR, m_Cmp(PredR, m_Specific(X), m_Specific(Y))) && diff --git a/llvm/lib/Transforms/Scalar/GuardWidening.cpp b/llvm/lib/Transforms/Scalar/GuardWidening.cpp index a8fda0c6ab9c..2978b7990a6e 100644 --- a/llvm/lib/Transforms/Scalar/GuardWidening.cpp +++ b/llvm/lib/Transforms/Scalar/GuardWidening.cpp @@ -727,7 +727,7 @@ GuardWideningImpl::mergeChecks(SmallVectorImpl &ChecksToHoist, // L >u C0 && L >u C1 -> L >u max(C0, C1) ConstantInt *RHS0, *RHS1; Value *LHS; - ICmpInst::Predicate Pred0, Pred1; + CmpPredicate Pred0, Pred1; // TODO: Support searching for pairs to merge from both whole lists of // ChecksToHoist and ChecksToWiden. if (ChecksToWiden.size() == 1 && ChecksToHoist.size() == 1 && diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index 16110cd25bc6..300a564e222e 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -591,7 +591,7 @@ bool JumpThreadingPass::computeValueKnownInPredecessorsImpl( // 'getPredicateOnEdge' method. This would be able to handle value // inequalities better, for example if the compare is "X < 4" and "X < 3" // is known true but "X < 4" itself is not available. - CmpInst::Predicate Pred; + CmpPredicate Pred; Value *Val; Constant *Cst; if (!PredCst && match(V, m_Cmp(Pred, m_Value(Val), m_Constant(Cst)))) @@ -2744,7 +2744,7 @@ bool JumpThreadingPass::duplicateCondBranchOnPHIIntoPred( // Pred is a predecessor of BB with an unconditional branch to BB. SI is // a Select instruction in Pred. BB has other predecessors and SI is used in // a PHI node in BB. SI has no other use. -// A new basic block, NewBB, is created and SI is converted to compare and +// A new basic block, NewBB, is created and SI is converted to compare and // conditional branch. SI is erased from parent. void JumpThreadingPass::unfoldSelectInstr(BasicBlock *Pred, BasicBlock *BB, SelectInst *SI, PHINode *SIUse, diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index 3ade32027289..a5d5eecb1ebf 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -2430,8 +2430,8 @@ static bool hoistMinMax(Instruction &I, Loop &L, ICFLoopSafetyInfo &SafetyInfo, } else return false; - auto MatchICmpAgainstInvariant = [&](Value *C, ICmpInst::Predicate &P, - Value *&LHS, Value *&RHS) { + auto MatchICmpAgainstInvariant = [&](Value *C, CmpPredicate &P, Value *&LHS, + Value *&RHS) { if (!match(C, m_OneUse(m_ICmp(P, m_Value(LHS), m_Value(RHS))))) return false; if (!LHS->getType()->isIntegerTy()) @@ -2448,12 +2448,13 @@ static bool hoistMinMax(Instruction &I, Loop &L, ICFLoopSafetyInfo &SafetyInfo, P = ICmpInst::getInversePredicate(P); return true; }; - ICmpInst::Predicate P1, P2; + CmpPredicate P1, P2; Value *LHS1, *LHS2, *RHS1, *RHS2; if (!MatchICmpAgainstInvariant(Cond1, P1, LHS1, RHS1) || !MatchICmpAgainstInvariant(Cond2, P2, LHS2, RHS2)) return false; - if (P1 != P2 || LHS1 != LHS2) + // FIXME: Use CmpPredicate::getMatching here. + if (P1 != static_cast(P2) || LHS1 != LHS2) return false; // Everything is fine, we can do the transform. @@ -2678,7 +2679,7 @@ static bool hoistAddSub(Instruction &I, Loop &L, ICFLoopSafetyInfo &SafetyInfo, MemorySSAUpdater &MSSAU, AssumptionCache *AC, DominatorTree *DT) { using namespace PatternMatch; - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *LHS, *RHS; if (!match(&I, m_ICmp(Pred, m_Value(LHS), m_Value(RHS)))) return false; diff --git a/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp b/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp index ff077624802b..73f1942849ac 100644 --- a/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp +++ b/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp @@ -32,7 +32,7 @@ struct ConditionInfo { /// ICmp instruction with this condition ICmpInst *ICmp = nullptr; /// Preciate info - ICmpInst::Predicate Pred = ICmpInst::BAD_ICMP_PREDICATE; + CmpPredicate Pred = ICmpInst::BAD_ICMP_PREDICATE; /// AddRec llvm value Value *AddRecValue = nullptr; /// Non PHI AddRec llvm value diff --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp index 05cf638d3f09..ba1c2241aea9 100644 --- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp +++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp @@ -2432,7 +2432,7 @@ static bool detectShiftUntilBitTestIdiom(Loop *CurLoop, Value *&BaseX, // Step 1: Check if the loop backedge is in desirable form. - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *CmpLHS, *CmpRHS; BasicBlock *TrueBB, *FalseBB; if (!match(LoopHeaderBB->getTerminator(), @@ -2797,7 +2797,7 @@ static bool detectShiftUntilZeroIdiom(Loop *CurLoop, ScalarEvolution *SE, // Step 1: Check if the loop backedge, condition is in desirable form. - ICmpInst::Predicate Pred; + CmpPredicate Pred; BasicBlock *TrueBB, *FalseBB; if (!match(LoopHeaderBB->getTerminator(), m_Br(m_Instruction(ValShiftedIsZero), m_BasicBlock(TrueBB), diff --git a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp index d8ef450eeb9a..0712ff77151e 100644 --- a/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp +++ b/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp @@ -2990,9 +2990,11 @@ static bool collectUnswitchCandidates( /// into its equivalent where `Pred` is something that we support for injected /// invariants (so far it is limited to ult), LHS in canonicalized form is /// non-invariant and RHS is an invariant. -static void canonicalizeForInvariantConditionInjection( - ICmpInst::Predicate &Pred, Value *&LHS, Value *&RHS, BasicBlock *&IfTrue, - BasicBlock *&IfFalse, const Loop &L) { +static void canonicalizeForInvariantConditionInjection(CmpPredicate &Pred, + Value *&LHS, Value *&RHS, + BasicBlock *&IfTrue, + BasicBlock *&IfFalse, + const Loop &L) { if (!L.contains(IfTrue)) { Pred = ICmpInst::getInversePredicate(Pred); std::swap(IfTrue, IfFalse); @@ -3235,7 +3237,7 @@ static bool collectUnswitchCandidatesWithInjections( // other). for (auto *DTN = DT.getNode(Latch); L.contains(DTN->getBlock()); DTN = DTN->getIDom()) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Value *LHS = nullptr, *RHS = nullptr; BasicBlock *IfTrue = nullptr, *IfFalse = nullptr; auto *BB = DTN->getBlock(); diff --git a/llvm/lib/Transforms/Utils/LoopPeel.cpp b/llvm/lib/Transforms/Utils/LoopPeel.cpp index 3cbde39b30b4..9a24c1b0d03d 100644 --- a/llvm/lib/Transforms/Utils/LoopPeel.cpp +++ b/llvm/lib/Transforms/Utils/LoopPeel.cpp @@ -378,7 +378,7 @@ static unsigned countToEliminateCompares(Loop &L, unsigned MaxPeelCount, return; } - CmpInst::Predicate Pred; + CmpPredicate Pred; if (!match(Condition, m_ICmp(Pred, m_Value(LeftVal), m_Value(RightVal)))) return; diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp index 791d52882397..0bc752a92340 100644 --- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp @@ -1816,7 +1816,7 @@ bool SCEVExpander::hasRelatedExistingExpansion(const SCEV *S, // Look for suitable value in simple conditions at the loop exits. for (BasicBlock *BB : ExitingBlocks) { - ICmpInst::Predicate Pred; + CmpPredicate Pred; Instruction *LHS, *RHS; if (!match(BB->getTerminator(), diff --git a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp index 7fca1a6aa526..f05d32d980e5 100644 --- a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp @@ -2164,16 +2164,14 @@ void WidenIV::calculatePostIncRange(Instruction *NarrowDef, !NarrowDefRHS->isNonNegative()) return; - auto UpdateRangeFromCondition = [&] (Value *Condition, - bool TrueDest) { - CmpInst::Predicate Pred; + auto UpdateRangeFromCondition = [&](Value *Condition, bool TrueDest) { + CmpPredicate Pred; Value *CmpRHS; if (!match(Condition, m_ICmp(Pred, m_Specific(NarrowDefLHS), m_Value(CmpRHS)))) return; - CmpInst::Predicate P = - TrueDest ? Pred : CmpInst::getInversePredicate(Pred); + CmpPredicate P = TrueDest ? Pred : ICmpInst::getInverseCmpPredicate(Pred); auto CmpRHSRange = SE->getSignedRange(SE->getSCEV(CmpRHS)); auto CmpConstrainedLHSRange = diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 0e11e8704db2..6a0f50507c72 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -516,7 +516,7 @@ static bool isCommutative(Instruction *I) { BO->uses(), [](const Use &U) { // Commutative, if icmp eq/ne sub, 0 - ICmpInst::Predicate Pred; + CmpPredicate Pred; if (match(U.getUser(), m_ICmp(Pred, m_Specific(U.get()), m_Zero())) && (Pred == ICmpInst::ICMP_EQ || Pred == ICmpInst::ICMP_NE)) @@ -11406,7 +11406,7 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef VectorizedVals, case Instruction::FCmp: case Instruction::ICmp: case Instruction::Select: { - CmpInst::Predicate VecPred, SwappedVecPred; + CmpPredicate VecPred, SwappedVecPred; auto MatchCmp = m_Cmp(VecPred, m_Value(), m_Value()); if (match(VL0, m_Select(MatchCmp, m_Value(), m_Value())) || match(VL0, MatchCmp)) @@ -11420,13 +11420,15 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef VectorizedVals, return InstructionCost(TTI::TCC_Free); auto *VI = cast(UniqueValues[Idx]); - CmpInst::Predicate CurrentPred = ScalarTy->isFloatingPointTy() - ? CmpInst::BAD_FCMP_PREDICATE - : CmpInst::BAD_ICMP_PREDICATE; + CmpPredicate CurrentPred = ScalarTy->isFloatingPointTy() + ? CmpInst::BAD_FCMP_PREDICATE + : CmpInst::BAD_ICMP_PREDICATE; auto MatchCmp = m_Cmp(CurrentPred, m_Value(), m_Value()); + // FIXME: Use CmpPredicate::getMatching here. if ((!match(VI, m_Select(MatchCmp, m_Value(), m_Value())) && !match(VI, MatchCmp)) || - (CurrentPred != VecPred && CurrentPred != SwappedVecPred)) + (CurrentPred != static_cast(VecPred) && + CurrentPred != static_cast(SwappedVecPred))) VecPred = SwappedVecPred = ScalarTy->isFloatingPointTy() ? CmpInst::BAD_FCMP_PREDICATE : CmpInst::BAD_ICMP_PREDICATE; @@ -19319,7 +19321,7 @@ public: // %3 = extractelement <2 x i32> %a, i32 0 // %4 = extractelement <2 x i32> %a, i32 1 // %select = select i1 %cond, i32 %3, i32 %4 - CmpInst::Predicate Pred; + CmpPredicate Pred; Instruction *L1; Instruction *L2; diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp index 0c324cbab88b..09489e249845 100644 --- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp +++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp @@ -597,7 +597,7 @@ bool VectorCombine::foldExtractExtract(Instruction &I) { return false; Instruction *I0, *I1; - CmpInst::Predicate Pred = CmpInst::BAD_ICMP_PREDICATE; + CmpPredicate Pred = CmpInst::BAD_ICMP_PREDICATE; if (!match(&I, m_Cmp(Pred, m_Instruction(I0), m_Instruction(I1))) && !match(&I, m_BinOp(m_Instruction(I0), m_Instruction(I1)))) return false; @@ -923,7 +923,7 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) { /// Match a vector binop or compare instruction with at least one inserted /// scalar operand and convert to scalar binop/cmp followed by insertelement. bool VectorCombine::scalarizeBinopOrCmp(Instruction &I) { - CmpInst::Predicate Pred = CmpInst::BAD_ICMP_PREDICATE; + CmpPredicate Pred = CmpInst::BAD_ICMP_PREDICATE; Value *Ins0, *Ins1; if (!match(&I, m_BinOp(m_Value(Ins0), m_Value(Ins1))) && !match(&I, m_Cmp(Pred, m_Value(Ins0), m_Value(Ins1)))) @@ -1063,9 +1063,11 @@ bool VectorCombine::foldExtractedCmps(Instruction &I) { Value *B0 = I.getOperand(0), *B1 = I.getOperand(1); Instruction *I0, *I1; Constant *C0, *C1; - CmpInst::Predicate P0, P1; + CmpPredicate P0, P1; + // FIXME: Use CmpPredicate::getMatching here. if (!match(B0, m_Cmp(P0, m_Instruction(I0), m_Constant(C0))) || - !match(B1, m_Cmp(P1, m_Instruction(I1), m_Constant(C1))) || P0 != P1) + !match(B1, m_Cmp(P1, m_Instruction(I1), m_Constant(C1))) || + P0 != static_cast(P1)) return false; // The compare operands must be extracts of the same vector with constant diff --git a/llvm/unittests/IR/PatternMatch.cpp b/llvm/unittests/IR/PatternMatch.cpp index 367ba6ab52a5..47fde5782a13 100644 --- a/llvm/unittests/IR/PatternMatch.cpp +++ b/llvm/unittests/IR/PatternMatch.cpp @@ -2381,7 +2381,7 @@ TYPED_TEST(MutableConstTest, ICmp) { ValueType MatchL; ValueType MatchR; - ICmpInst::Predicate MatchPred; + CmpPredicate MatchPred; EXPECT_TRUE(m_ICmp(MatchPred, m_Value(MatchL), m_Value(MatchR)) .match((InstructionType)IRB.CreateICmp(Pred, L, R))); @@ -2473,7 +2473,7 @@ TYPED_TEST(MutableConstTest, FCmp) { ValueType MatchL; ValueType MatchR; - FCmpInst::Predicate MatchPred; + CmpPredicate MatchPred; EXPECT_TRUE(m_FCmp(MatchPred, m_Value(MatchL), m_Value(MatchR)) .match((InstructionType)IRB.CreateFCmp(Pred, L, R))); -- cgit v1.2.3 From 7a3504a133437525f3e56f5811e313e4695f932f Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 06:18:48 -0800 Subject: [OpenACC] Enable 'copy' clause sema for data clause 'copy' is another that is identical in behavior on 'data' as far as semantic analysis is concerned as the compute constructs, so this patch adds tests and enables 'copy'. --- clang/lib/Sema/SemaOpenACC.cpp | 10 ++- clang/test/SemaOpenACC/data-construct-copy-ast.cpp | 93 ++++++++++++++++++++++ .../test/SemaOpenACC/data-construct-copy-clause.c | 66 +++++++++++++++ clang/test/SemaOpenACC/data-construct.cpp | 1 - 4 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-copy-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-copy-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 99daa3eba628..84d2e2a7f506 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -949,11 +949,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitPresentClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though diff --git a/clang/test/SemaOpenACC/data-construct-copy-ast.cpp b/clang/test/SemaOpenACC/data-construct-copy-ast.cpp new file mode 100644 index 000000000000..de067f00a2b2 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copy-ast.cpp @@ -0,0 +1,93 @@ +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; + +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt +#pragma acc data copy(GlobalArray) pcopy(PointerParam[Global]) present_or_copy(Global) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copy clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopy clause + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copy clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt +} +template +void TemplUses(T t, U u) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + +#pragma acc data copy(t) pcopy(NTTP, u) present_or_copy(u[0:t]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copy clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopy clause + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copy clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: NullStmt + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: TemplateArgument type 'int *' + // CHECK-NEXT: PointerType{{.*}} 'int *' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copy clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopy clause + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copy clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: NullStmt +} +void Inst() { + static constexpr unsigned CEVar = 1; + int i; + TemplUses(i, &i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-copy-clause.c b/clang/test/SemaOpenACC/data-construct-copy-clause.c new file mode 100644 index 000000000000..035463c22c68 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copy-clause.c @@ -0,0 +1,66 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data copy(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'pcopy' is a deprecated clause name and is now an alias for 'copy'}} +#pragma acc data pcopy(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'present_or_copy' is a deprecated clause name and is now an alias for 'copy'}} +#pragma acc data present_or_copy(LocalInt) + ; + + // Valid cases: +#pragma acc data copy(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data copy(LocalArray[2:1]) + ; + +#pragma acc data copy(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copy(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copy(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data copy(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data copy(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copy((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copy((float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'copy' clause is not valid on 'enter data' directive}} +#pragma acc enter data copy(LocalInt) + // expected-error@+1{{OpenACC 'pcopy' clause is not valid on 'exit data' directive}} +#pragma acc exit data pcopy(LocalInt) + // expected-error@+1{{OpenACC 'present_or_copy' clause is not valid on 'host_data' directive}} +#pragma acc host_data present_or_copy(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 2df68cc9bba4..68186579b981 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -21,7 +21,6 @@ void HasStmt() { void AtLeastOneOf() { int Var; // Data - // expected-warning@+1{{OpenACC clause 'copy' not yet implemented}} #pragma acc data copy(Var) ; // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} -- cgit v1.2.3 From 979e9361f0e0426e555c94cb8b1a64c655805765 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Fri, 13 Dec 2024 09:28:30 -0500 Subject: [libc++] Fix improper static_cast in std::deque and __split_buffer (#119106) This PR addresses the improper use of `static_cast` to `size_t` where `size_type` is intended. Although the `size_type` member type of STL containers is usually a synonym of `std::size_t`, there is no guarantee that they are always equivalent. The C++ standard does not mandate this equivalence. In libc++'s implementations of `std::deque`, `std::vector`, and `__split_buffer`, the `size_type` member type is defined as `std::allocator_traits::size_type`, which is either `allocator_type::size_type` if available or `std::make_unsigned::type`. While it is true for `std::allocator` that the `size_type` member type is `std::size_t`, for user-defined allocator types, they may mismatch. This justifies the need to replace `static_cast` with `static_cast` in this PR. --- libcxx/include/__split_buffer | 4 ++-- libcxx/include/deque | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer index a637c83d17d1..5ee70220b55a 100644 --- a/libcxx/include/__split_buffer +++ b/libcxx/include/__split_buffer @@ -435,7 +435,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 void __split_buffer<_Tp, _Allocator>::emplace_fron __begin_ = std::move_backward(__begin_, __end_, __end_ + __d); __end_ += __d; } else { - size_type __c = std::max(2 * static_cast(__cap_ - __first_), 1); + size_type __c = std::max(2 * static_cast(__cap_ - __first_), 1); __split_buffer __t(__c, (__c + 3) / 4, __alloc_); __t.__construct_at_end(move_iterator(__begin_), move_iterator(__end_)); std::swap(__first_, __t.__first_); @@ -458,7 +458,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 void __split_buffer<_Tp, _Allocator>::emplace_back __end_ = std::move(__begin_, __end_, __begin_ - __d); __begin_ -= __d; } else { - size_type __c = std::max(2 * static_cast(__cap_ - __first_), 1); + size_type __c = std::max(2 * static_cast(__cap_ - __first_), 1); __split_buffer __t(__c, __c / 4, __alloc_); __t.__construct_at_end(move_iterator(__begin_), move_iterator(__end_)); std::swap(__first_, __t.__first_); diff --git a/libcxx/include/deque b/libcxx/include/deque index 2bd850a67f07..63eb83655310 100644 --- a/libcxx/include/deque +++ b/libcxx/include/deque @@ -2433,7 +2433,7 @@ typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::erase(const_it difference_type __pos = __f - __b; iterator __p = __b + __pos; allocator_type& __a = __alloc(); - if (static_cast(__pos) <= (size() - 1) / 2) { // erase from front + if (static_cast(__pos) <= (size() - 1) / 2) { // erase from front std::move_backward(__b, __p, std::next(__p)); __alloc_traits::destroy(__a, std::addressof(*__b)); --__size(); @@ -2461,7 +2461,7 @@ typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::erase(const_it iterator __p = __b + __pos; if (__n > 0) { allocator_type& __a = __alloc(); - if (static_cast(__pos) <= (size() - __n) / 2) { // erase from front + if (static_cast(__pos) <= (size() - __n) / 2) { // erase from front iterator __i = std::move_backward(__b, __p, __p + __n); for (; __b != __i; ++__b) __alloc_traits::destroy(__a, std::addressof(*__b)); -- cgit v1.2.3 From 4eec286b51524d385524a9f7cee4b9c4f8153570 Mon Sep 17 00:00:00 2001 From: lntue Date: Fri, 13 Dec 2024 06:32:38 -0800 Subject: [libc] Add MPFR testing infra for float128. (#119499) --- libc/src/__support/complex_type.h | 6 +- .../__support/macros/properties/complex_types.h | 5 + libc/src/__support/macros/properties/types.h | 5 + libc/test/src/math/CMakeLists.txt | 13 +++ libc/test/src/math/sqrtf128_test.cpp | 43 +++++++++ libc/utils/MPFRWrapper/MPFRUtils.cpp | 102 +++++++++++++++++++-- 6 files changed, 164 insertions(+), 10 deletions(-) create mode 100644 libc/test/src/math/sqrtf128_test.cpp diff --git a/libc/src/__support/complex_type.h b/libc/src/__support/complex_type.h index a6207d38d0eb..5dadfd20a005 100644 --- a/libc/src/__support/complex_type.h +++ b/libc/src/__support/complex_type.h @@ -36,8 +36,7 @@ template <> struct make_complex { using type = cfloat16; }; #endif -#if defined(LIBC_TYPES_HAS_CFLOAT128) && \ - !defined(LIBC_TYPES_LONG_DOUBLE_IS_FLOAT128) +#ifdef LIBC_TYPES_CFLOAT128_IS_NOT_COMPLEX_LONG_DOUBLE template <> struct make_complex { using type = cfloat128; }; @@ -62,8 +61,7 @@ template <> struct make_real { using type = float16; }; #endif -#if defined(LIBC_TYPES_HAS_CFLOAT128) && \ - !defined(LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE) +#ifdef LIBC_TYPES_CFLOAT128_IS_NOT_COMPLEX_LONG_DOUBLE template <> struct make_real { using type = float128; }; diff --git a/libc/src/__support/macros/properties/complex_types.h b/libc/src/__support/macros/properties/complex_types.h index 3f4a7646649c..ede4d6b7c7d9 100644 --- a/libc/src/__support/macros/properties/complex_types.h +++ b/libc/src/__support/macros/properties/complex_types.h @@ -22,4 +22,9 @@ // LIBC_TYPES_HAS_CFLOAT128 and 'cfloat128' type are provided by // "include/llvm-libc-types/cfloat128.h" +#if defined(LIBC_TYPES_HAS_CFLOAT128) && \ + !defined(LIBC_TYPES_CFLOAT128_IS_COMPLEX_LONG_DOUBLE) +#define LIBC_TYPES_CFLOAT128_IS_NOT_COMPLEX_LONG_DOUBLE +#endif + #endif // LLVM_LIBC_SRC___SUPPORT_MACROS_PROPERTIES_CTYPES_H diff --git a/libc/src/__support/macros/properties/types.h b/libc/src/__support/macros/properties/types.h index 30c742c007ca..6293b9d4d292 100644 --- a/libc/src/__support/macros/properties/types.h +++ b/libc/src/__support/macros/properties/types.h @@ -31,6 +31,11 @@ #define LIBC_TYPES_LONG_DOUBLE_IS_DOUBLE_DOUBLE #endif +#if defined(LIBC_TYPES_HAS_FLOAT128) && \ + !defined(LIBC_TYPES_LONG_DOUBLE_IS_FLOAT128) +#define LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +#endif + // int64 / uint64 support #if defined(UINT64_MAX) #define LIBC_TYPES_HAS_INT64 diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt index ea75720df4f4..02e974f34abf 100644 --- a/libc/test/src/math/CMakeLists.txt +++ b/libc/test/src/math/CMakeLists.txt @@ -1549,6 +1549,19 @@ add_fp_unittest( libc.src.math.sqrtf16 ) +add_fp_unittest( + sqrtf128_test + NEED_MPFR + SUITE + libc-math-unittests + SRCS + sqrtf128_test.cpp + HDRS + SqrtTest.h + DEPENDS + libc.src.math.sqrtf128 +) + add_fp_unittest( generic_sqrtf_test NEED_MPFR diff --git a/libc/test/src/math/sqrtf128_test.cpp b/libc/test/src/math/sqrtf128_test.cpp new file mode 100644 index 000000000000..25229f834d33 --- /dev/null +++ b/libc/test/src/math/sqrtf128_test.cpp @@ -0,0 +1,43 @@ +//===-- Unittests for sqrtf128 --------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "SqrtTest.h" + +#include "src/math/sqrtf128.h" + +#include "src/__support/integer_literals.h" + +LIST_SQRT_TESTS(float128, LIBC_NAMESPACE::sqrtf128) + +TEST_F(LlvmLibcSqrtTest, SpecialInputs) { + constexpr float128 INPUTS[] = { + 0x0.000000dee2f5b6a26c8f07f05442p-16382q, + 0x0.000000c86d174c5ad8ae54a548e7p-16382q, + 0x0.000020ab15cfe0b8e488e128f535p-16382q, + 0x0.0000219e97732a9970f2511989bap-16382q, + 0x0.000026e477546ae99ef57066f9fdp-16382q, + 0x0.00002d0f88d27a496b3e533f5067p-16382q, + 0x1.0000000000000000000000000001p+0q, + 0x1.0000000000000000000000000003p+0q, + 0x1.0000000000000000000000000005p+0q, + 0x1.2af17a4ae6f93d11310c49c11b59p+0q, + 0x1.c4f5074269525063a26051a0ad27p+0q, + 0x1.035cb5f298a801dc4be9b1f8cd97p+1q, + 0x1.274be02380427e709beab4dedeb4p+1q, + 0x1.64e797cfdbaa3f7e2f33279dbc6p+1q, + 0x1.d78d8352b48608b510bfd5c75315p+1q, + 0x1.fffffffffffffffffffffffffffbp+1q, + 0x1.fffffffffffffffffffffffffffdp+1q, + 0x1.ffffffffffffffffffffffffffffp+1q, + }; + + for (auto input : INPUTS) { + ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Sqrt, input, + LIBC_NAMESPACE::sqrtf128(input), 0.5); + } +} diff --git a/libc/utils/MPFRWrapper/MPFRUtils.cpp b/libc/utils/MPFRWrapper/MPFRUtils.cpp index 00592c5cb15f..0dac497bb779 100644 --- a/libc/utils/MPFRWrapper/MPFRUtils.cpp +++ b/libc/utils/MPFRWrapper/MPFRUtils.cpp @@ -22,6 +22,13 @@ #include "mpfr_inc.h" +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +extern "C" { +int mpfr_set_float128(mpfr_ptr, float128, mpfr_rnd_t); +float128 mpfr_get_float128(mpfr_srcptr, mpfr_rnd_t); +} +#endif + template using FPBits = LIBC_NAMESPACE::fputil::FPBits; namespace LIBC_NAMESPACE_DECL { @@ -47,8 +54,18 @@ template <> struct ExtraPrecision { }; template <> struct ExtraPrecision { +#ifdef LIBC_TYPES_LONG_DOUBLE_IS_FLOAT128 + static constexpr unsigned int VALUE = 512; +#else static constexpr unsigned int VALUE = 256; +#endif +}; + +#if defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE) +template <> struct ExtraPrecision { + static constexpr unsigned int VALUE = 512; }; +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE // If the ulp tolerance is less than or equal to 0.5, we would check that the // result is rounded correctly with respect to the rounding mode by using the @@ -134,6 +151,19 @@ public: mpfr_set_ld(value, x, mpfr_rounding); } +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE + template , int> = 0> + explicit MPFRNumber(XType x, + unsigned int precision = ExtraPrecision::VALUE, + RoundingMode rounding = RoundingMode::Nearest) + : mpfr_precision(precision), + mpfr_rounding(get_mpfr_rounding_mode(rounding)) { + mpfr_init2(value, mpfr_precision); + mpfr_set_float128(value, x, mpfr_rounding); + } +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE + template , int> = 0> explicit MPFRNumber(XType x, @@ -647,7 +677,7 @@ public: // These functions are useful for debugging. template T as() const; - void dump(const char *msg) const { mpfr_printf("%s%.128Rf\n", msg, value); } + void dump(const char *msg) const { mpfr_printf("%s%.128g\n", msg, value); } // Return the ULP (units-in-the-last-place) difference between the // stored MPFR and a floating point number. @@ -770,6 +800,13 @@ template <> float16 MPFRNumber::as() const { } #endif +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template <> float128 MPFRNumber::as() const { + return mpfr_get_float128(value, mpfr_rounding); +} + +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE + namespace internal { template @@ -997,7 +1034,27 @@ template void explain_unary_operation_single_output_error(Operation op, double, template void explain_unary_operation_single_output_error(Operation op, long double, float16, double, RoundingMode); -#endif +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template void explain_unary_operation_single_output_error(Operation op, + float128, float16, + double, RoundingMode); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +#endif // LIBC_TYPES_HAS_FLOAT16 + +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template void explain_unary_operation_single_output_error(Operation op, + float128, float128, + double, RoundingMode); +template void explain_unary_operation_single_output_error(Operation op, + float128, float, + double, RoundingMode); +template void explain_unary_operation_single_output_error(Operation op, + float128, double, + double, RoundingMode); +template void explain_unary_operation_single_output_error(Operation op, + float128, long double, + double, RoundingMode); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE template void explain_unary_operation_two_outputs_error( @@ -1228,7 +1285,25 @@ template bool compare_unary_operation_single_output(Operation, double, float16, template bool compare_unary_operation_single_output(Operation, long double, float16, double, RoundingMode); -#endif +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template bool compare_unary_operation_single_output(Operation, float128, + float16, double, + RoundingMode); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +#endif // LIBC_TYPES_HAS_FLOAT16 + +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template bool compare_unary_operation_single_output(Operation, float128, + float128, double, + RoundingMode); +template bool compare_unary_operation_single_output(Operation, float128, float, + double, RoundingMode); +template bool compare_unary_operation_single_output(Operation, float128, double, + double, RoundingMode); +template bool compare_unary_operation_single_output(Operation, float128, + long double, double, + RoundingMode); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE template bool compare_unary_operation_two_outputs(Operation op, T input, @@ -1398,9 +1473,14 @@ template bool round_to_long(T x, long &result) { template bool round_to_long(float, long &); template bool round_to_long(double, long &); template bool round_to_long(long double, long &); + #ifdef LIBC_TYPES_HAS_FLOAT16 template bool round_to_long(float16, long &); -#endif +#endif // LIBC_TYPES_HAS_FLOAT16 + +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template bool round_to_long(float128, long &); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE template bool round_to_long(T x, RoundingMode mode, long &result) { MPFRNumber mpfr(x); @@ -1410,9 +1490,14 @@ template bool round_to_long(T x, RoundingMode mode, long &result) { template bool round_to_long(float, RoundingMode, long &); template bool round_to_long(double, RoundingMode, long &); template bool round_to_long(long double, RoundingMode, long &); + #ifdef LIBC_TYPES_HAS_FLOAT16 template bool round_to_long(float16, RoundingMode, long &); -#endif +#endif // LIBC_TYPES_HAS_FLOAT16 + +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template bool round_to_long(float128, RoundingMode, long &); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE template T round(T x, RoundingMode mode) { MPFRNumber mpfr(x); @@ -1423,9 +1508,14 @@ template T round(T x, RoundingMode mode) { template float round(float, RoundingMode); template double round(double, RoundingMode); template long double round(long double, RoundingMode); + #ifdef LIBC_TYPES_HAS_FLOAT16 template float16 round(float16, RoundingMode); -#endif +#endif // LIBC_TYPES_HAS_FLOAT16 + +#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE +template float128 round(float128, RoundingMode); +#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE } // namespace mpfr } // namespace testing -- cgit v1.2.3 From 55154d6896e31dd707ac90dd15ed09bec446b4cf Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 06:24:19 -0800 Subject: [OpenACC] Enable 'no_create' sema for data construct Adds tests and enables the 'no_create' clause semantic analysis for the 'data' constuct, so it will no longer report 'not yet implemented'. --- clang/lib/Sema/SemaOpenACC.cpp | 6 -- .../SemaOpenACC/data-construct-no_create-ast.cpp | 82 ++++++++++++++++++++++ .../SemaOpenACC/data-construct-no_create-clause.c | 58 +++++++++++++++ clang/test/SemaOpenACC/data-construct.cpp | 1 - 4 files changed, 140 insertions(+), 7 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-no_create-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-no_create-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 84d2e2a7f506..9a3e88eeb462 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -915,12 +915,6 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitFirstPrivateClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitNoCreateClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. - if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) - return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though // it isn't apparent in the standard where this is justified. diff --git a/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp b/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp new file mode 100644 index 000000000000..6ff521eb4be0 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp @@ -0,0 +1,82 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data no_create(GlobalArray, PointerParam[Global]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: no_create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt +} + +template +void TemplUses(T t, U u) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + + +#pragma acc data no_create(t) present(NTTP, u) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: no_create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // TODO_CHECK-NEXT: present clause + // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: NullStmt + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: TemplateArgument type 'int *' + // CHECK-NEXT: PointerType{{.*}} 'int *' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} u 'int *' + // CHECK-NEXT: CompoundStmt + +// #pragma acc data no_create(t) present(NTTP, u) + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: no_create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // TODO_CHECK-NEXT: present clause + // TODO_CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // TODO_CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: NullStmt +} + +void Inst() { + static constexpr unsigned CEVar = 1; + int i; + TemplUses(i, &i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-no_create-clause.c b/clang/test/SemaOpenACC/data-construct-no_create-clause.c new file mode 100644 index 000000000000..74bc972ced64 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-no_create-clause.c @@ -0,0 +1,58 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data no_create(LocalInt) + ; + + // Valid cases: +#pragma acc data no_create(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data no_create(LocalArray[2:1]) + ; + +#pragma acc data no_create(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data no_create(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data no_create(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data no_create(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data no_create(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data no_create((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data no_create((float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'no_create' clause is not valid on 'exit data' directive}} +#pragma acc exit data no_create(LocalInt) + // expected-error@+1{{OpenACC 'no_create' clause is not valid on 'enter data' directive}} +#pragma acc enter data no_create(LocalInt) + // expected-error@+1{{OpenACC 'no_create' clause is not valid on 'host_data' directive}} +#pragma acc host_data no_create(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 68186579b981..7f3a54b009ab 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -32,7 +32,6 @@ void AtLeastOneOf() { // expected-warning@+1{{OpenACC clause 'create' not yet implemented}} #pragma acc data create(Var) ; - // expected-warning@+1{{OpenACC clause 'no_create' not yet implemented}} #pragma acc data no_create(Var) ; // expected-warning@+1{{OpenACC clause 'present' not yet implemented}} -- cgit v1.2.3 From 62bdb85f9b293180a2cf402fc2fa7c242d01ef3f Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Fri, 13 Dec 2024 09:35:45 -0500 Subject: [libc++][NFC] Fix incorrect comment for vector::assign(iter, iter) test --- .../containers/sequences/vector/vector.cons/assign_iter_iter.pass.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libcxx/test/std/containers/sequences/vector/vector.cons/assign_iter_iter.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.cons/assign_iter_iter.pass.cpp index 9b52885b9bf8..b6aeba4e4eef 100644 --- a/libcxx/test/std/containers/sequences/vector/vector.cons/assign_iter_iter.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector/vector.cons/assign_iter_iter.pass.cpp @@ -8,7 +8,8 @@ // -// void assign(size_type n, const_reference v); +// template +// constexpr void assign(InputIt first, InputIt last); #include #include -- cgit v1.2.3 From 9359625ba99dfbce8d8c27373ade544df16bee34 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 06:34:18 -0800 Subject: [OpenACC] 'create' clause sema for data/enter data constructs Enable and add tests for 'create' on a data or enter data construct. --- clang/lib/Sema/SemaOpenACC.cpp | 6 - .../test/SemaOpenACC/data-construct-create-ast.cpp | 137 +++++++++++++++++++++ .../SemaOpenACC/data-construct-create-clause.c | 71 +++++++++++ clang/test/SemaOpenACC/data-construct.cpp | 2 - 4 files changed, 208 insertions(+), 8 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-create-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-create-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 9a3e88eeb462..d1425aa4eecc 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -996,12 +996,6 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyOutClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitCreateClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. - if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) - return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though // it isn't apparent in the standard where this is justified. diff --git a/clang/test/SemaOpenACC/data-construct-create-ast.cpp b/clang/test/SemaOpenACC/data-construct-create-ast.cpp new file mode 100644 index 000000000000..623d44aac43f --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-create-ast.cpp @@ -0,0 +1,137 @@ +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data create(GlobalArray) pcreate(zero:PointerParam[Global]) present_or_create(Global) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcreate clause : zero + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt + +#pragma acc enter data create(GlobalArray) pcreate(zero:PointerParam[Global]) present_or_create(Global) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcreate clause : zero + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' +} + +template +void TemplUses(T t, U u) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + +#pragma acc data create(t) pcreate(zero: NTTP, u) present_or_create(u[0:t]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcreate clause : zero + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_create clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: NullStmt + +#pragma acc enter data create(t) pcreate(zero: NTTP, u) present_or_create(u[0:t]) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcreate clause : zero + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_create clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: TemplateArgument type 'int *' + // CHECK-NEXT: PointerType{{.*}} 'int *' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcreate clause : zero + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_create clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: NullStmt + + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: create clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcreate clause : zero + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_create clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' +} + +void Inst() { + static constexpr unsigned CEVar = 1; + int i; + TemplUses(i, &i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-create-clause.c b/clang/test/SemaOpenACC/data-construct-create-clause.c new file mode 100644 index 000000000000..08210f85d592 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-create-clause.c @@ -0,0 +1,71 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data create(LocalInt) + ; +#pragma acc enter data create(LocalInt) + + // expected-warning@+1{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}} +#pragma acc data pcreate(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}} +#pragma acc data present_or_create(LocalInt) + ; + + // Valid cases: +#pragma acc data create(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data create(LocalArray[2:1]) + ; +#pragma acc data create(zero:LocalArray[2:1]) + ; + +#pragma acc data create(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data create(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data create(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data create(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data create(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data create((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data create((float)ArrayParam[2]) + ; + // expected-error@+2{{invalid tag 'invalid' on 'create' clause}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data create(invalid:(float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'create' clause is not valid on 'exit data' directive}} +#pragma acc exit data create(LocalInt) + // expected-error@+1{{OpenACC 'pcreate' clause is not valid on 'host_data' directive}} +#pragma acc host_data pcreate(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 7f3a54b009ab..3f95f4055802 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -29,7 +29,6 @@ void AtLeastOneOf() { // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc data copyout(Var) ; - // expected-warning@+1{{OpenACC clause 'create' not yet implemented}} #pragma acc data create(Var) ; #pragma acc data no_create(Var) @@ -66,7 +65,6 @@ void AtLeastOneOf() { // Enter Data // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(Var) - // expected-warning@+1{{OpenACC clause 'create' not yet implemented}} #pragma acc enter data create(Var) // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} #pragma acc enter data attach(Var) -- cgit v1.2.3 From 1cc71197550b92fc23624d81f2474244772bfcfb Mon Sep 17 00:00:00 2001 From: Congcong Cai Date: Fri, 13 Dec 2024 23:04:05 +0800 Subject: [clang-tidy][NFC][doc] clean out-dated clang-static-analyzer checks documents and update check list (#119887) The missing part of #119580 --- .../checks/clang-analyzer/security.PutenvStackArray.rst | 2 ++ .../checks/clang-analyzer/security.SetgidSetuidOrder.rst | 2 ++ .../docs/clang-tidy/checks/clang-analyzer/valist.CopyToSelf.rst | 9 --------- .../clang-tidy/checks/clang-analyzer/valist.Uninitialized.rst | 9 --------- .../clang-tidy/checks/clang-analyzer/valist.Unterminated.rst | 9 --------- clang-tools-extra/docs/clang-tidy/checks/list.rst | 3 ++- 6 files changed, 6 insertions(+), 28 deletions(-) delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.CopyToSelf.rst delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Uninitialized.rst delete mode 100644 clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Unterminated.rst diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst index 55506ed16c83..5858078246d9 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.PutenvStackArray.rst @@ -1,4 +1,6 @@ .. title:: clang-tidy - clang-analyzer-security.PutenvStackArray +.. meta:: + :http-equiv=refresh: 5;URL=https://clang.llvm.org/docs/analyzer/checkers.html#security-putenvstackarray-c clang-analyzer-security.PutenvStackArray ======================================== diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst index af9ca517e02c..b3ba78597a5b 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/security.SetgidSetuidOrder.rst @@ -1,4 +1,6 @@ .. title:: clang-tidy - clang-analyzer-security.SetgidSetuidOrder +.. meta:: + :http-equiv=refresh: 5;URL=https://clang.llvm.org/docs/analyzer/checkers.html#security-setgidsetuidorder-c clang-analyzer-security.SetgidSetuidOrder ========================================= diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.CopyToSelf.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.CopyToSelf.rst deleted file mode 100644 index d0c82abd8190..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.CopyToSelf.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-valist.CopyToSelf - -clang-analyzer-valist.CopyToSelf -================================ - -Check for va_lists which are copied onto itself. - -The clang-analyzer-valist.CopyToSelf check is an alias of -Clang Static Analyzer valist.CopyToSelf. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Uninitialized.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Uninitialized.rst deleted file mode 100644 index 98b5dd023254..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Uninitialized.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-valist.Uninitialized - -clang-analyzer-valist.Uninitialized -=================================== - -Check for usages of uninitialized (or already released) va_lists. - -The clang-analyzer-valist.Uninitialized check is an alias of -Clang Static Analyzer valist.Uninitialized. diff --git a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Unterminated.rst b/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Unterminated.rst deleted file mode 100644 index 85e21c572106..000000000000 --- a/clang-tools-extra/docs/clang-tidy/checks/clang-analyzer/valist.Unterminated.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. title:: clang-tidy - clang-analyzer-valist.Unterminated - -clang-analyzer-valist.Unterminated -================================== - -Check for va_lists which are not released by a va_end call. - -The clang-analyzer-valist.Unterminated check is an alias of -Clang Static Analyzer valist.Unterminated. diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst index c85466618ec0..4d8853a0f6d8 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/list.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst @@ -115,8 +115,8 @@ Clang-Tidy Checks :doc:`bugprone-multiple-new-in-one-expression `, :doc:`bugprone-multiple-statement-macro `, :doc:`bugprone-no-escape `, - :doc:`bugprone-nondeterministic-pointer-iteration-order `, :doc:`bugprone-non-zero-enum-to-bool-conversion `, + :doc:`bugprone-nondeterministic-pointer-iteration-order `, :doc:`bugprone-not-null-terminated-result `, "Yes" :doc:`bugprone-optional-value-conversion `, "Yes" :doc:`bugprone-parent-virtual-call `, "Yes" @@ -514,6 +514,7 @@ Check aliases :doc:`clang-analyzer-security.insecureAPI.bcmp `, `Clang Static Analyzer security.insecureAPI.bcmp `_, :doc:`clang-analyzer-security.insecureAPI.bcopy `, `Clang Static Analyzer security.insecureAPI.bcopy `_, :doc:`clang-analyzer-security.insecureAPI.bzero `, `Clang Static Analyzer security.insecureAPI.bzero `_, + :doc:`clang-analyzer-security.insecureAPI.decodeValueOfObjCType `, Clang Static Analyzer security.insecureAPI.decodeValueOfObjCType, :doc:`clang-analyzer-security.insecureAPI.getpw `, `Clang Static Analyzer security.insecureAPI.getpw `_, :doc:`clang-analyzer-security.insecureAPI.gets `, `Clang Static Analyzer security.insecureAPI.gets `_, :doc:`clang-analyzer-security.insecureAPI.mkstemp `, `Clang Static Analyzer security.insecureAPI.mkstemp `_, -- cgit v1.2.3 From 019948647ebdb9f4d5cfce5a8f4afe9d4eafb14e Mon Sep 17 00:00:00 2001 From: WANG Rui Date: Fri, 13 Dec 2024 23:00:14 +0800 Subject: [LoongArch][NFC] Pre-commit tests for sign-extension removal with vectors --- llvm/test/CodeGen/LoongArch/sextw-removal.ll | 198 +++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/llvm/test/CodeGen/LoongArch/sextw-removal.ll b/llvm/test/CodeGen/LoongArch/sextw-removal.ll index 0aeafadb9325..684ac1d35586 100644 --- a/llvm/test/CodeGen/LoongArch/sextw-removal.ll +++ b/llvm/test/CodeGen/LoongArch/sextw-removal.ll @@ -1334,3 +1334,201 @@ entry: %a = call i32 @llvm.loongarch.lsx.vpickve2gr.w(<4 x i32> %v, i32 3) ret i32 %a } + +define fastcc ptr @test21(ptr %B, ptr %Op0, ptr %Op1, ptr %P, ptr %M, i1 zeroext %I, i64 %0, ptr %a.1, i64 %1, i1 %c, i32 %2) { +; CHECK-LABEL: test21: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: addi.d $sp, $sp, -80 +; CHECK-NEXT: .cfi_def_cfa_offset 80 +; CHECK-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill +; CHECK-NEXT: st.d $fp, $sp, 64 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s0, $sp, 56 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s1, $sp, 48 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s2, $sp, 40 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s3, $sp, 32 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s4, $sp, 24 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s5, $sp, 16 # 8-byte Folded Spill +; CHECK-NEXT: st.d $s6, $sp, 8 # 8-byte Folded Spill +; CHECK-NEXT: .cfi_offset 1, -8 +; CHECK-NEXT: .cfi_offset 22, -16 +; CHECK-NEXT: .cfi_offset 23, -24 +; CHECK-NEXT: .cfi_offset 24, -32 +; CHECK-NEXT: .cfi_offset 25, -40 +; CHECK-NEXT: .cfi_offset 26, -48 +; CHECK-NEXT: .cfi_offset 27, -56 +; CHECK-NEXT: .cfi_offset 28, -64 +; CHECK-NEXT: .cfi_offset 29, -72 +; CHECK-NEXT: ld.d $s6, $sp, 80 +; CHECK-NEXT: move $s2, $a7 +; CHECK-NEXT: move $s4, $a5 +; CHECK-NEXT: move $s0, $a4 +; CHECK-NEXT: move $fp, $a3 +; CHECK-NEXT: move $s5, $a2 +; CHECK-NEXT: move $s3, $a1 +; CHECK-NEXT: move $s1, $a0 +; CHECK-NEXT: move $a0, $zero +; CHECK-NEXT: jirl $ra, $zero, 0 +; CHECK-NEXT: beqz $s4, .LBB24_2 +; CHECK-NEXT: # %bb.1: # %if.then26 +; CHECK-NEXT: addi.w $s6, $s6, 1 +; CHECK-NEXT: beqz $s4, .LBB24_3 +; CHECK-NEXT: b .LBB24_6 +; CHECK-NEXT: .LBB24_2: +; CHECK-NEXT: move $s3, $s5 +; CHECK-NEXT: bnez $s4, .LBB24_6 +; CHECK-NEXT: .LBB24_3: # %for.cond32.preheader.preheader +; CHECK-NEXT: ld.d $a0, $sp, 96 +; CHECK-NEXT: ld.d $a1, $sp, 88 +; CHECK-NEXT: addi.w $a2, $s6, 0 +; CHECK-NEXT: sltui $a2, $a2, 1 +; CHECK-NEXT: masknez $a0, $a0, $a2 +; CHECK-NEXT: vreplgr2vr.w $vr0, $s6 +; CHECK-NEXT: andi $a1, $a1, 1 +; CHECK-NEXT: .p2align 4, , 16 +; CHECK-NEXT: .LBB24_4: # %for.cond32.preheader +; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: st.w $a0, $zero, 0 +; CHECK-NEXT: vst $vr0, $s2, 0 +; CHECK-NEXT: bnez $a1, .LBB24_4 +; CHECK-NEXT: # %bb.5: # %for.cond.cleanup +; CHECK-NEXT: move $a0, $zero +; CHECK-NEXT: move $a1, $s3 +; CHECK-NEXT: move $a2, $zero +; CHECK-NEXT: move $a3, $zero +; CHECK-NEXT: move $a4, $zero +; CHECK-NEXT: move $a5, $zero +; CHECK-NEXT: jirl $ra, $zero, 0 +; CHECK-NEXT: move $a0, $s1 +; CHECK-NEXT: move $a1, $s0 +; CHECK-NEXT: move $a2, $zero +; CHECK-NEXT: move $a3, $fp +; CHECK-NEXT: jirl $ra, $zero, 0 +; CHECK-NEXT: .LBB24_6: # %for.cond32.preheader.us.preheader +; CHECK-NEXT: move $a0, $zero +; CHECK-NEXT: ld.d $s6, $sp, 8 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $s5, $sp, 16 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $s4, $sp, 24 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $s3, $sp, 32 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $s2, $sp, 40 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $s1, $sp, 48 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $s0, $sp, 56 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $fp, $sp, 64 # 8-byte Folded Reload +; CHECK-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload +; CHECK-NEXT: addi.d $sp, $sp, 80 +; CHECK-NEXT: ret +; +; NORMV-LABEL: test21: +; NORMV: # %bb.0: # %entry +; NORMV-NEXT: addi.d $sp, $sp, -80 +; NORMV-NEXT: .cfi_def_cfa_offset 80 +; NORMV-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill +; NORMV-NEXT: st.d $fp, $sp, 64 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s0, $sp, 56 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s1, $sp, 48 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s2, $sp, 40 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s3, $sp, 32 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s4, $sp, 24 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s5, $sp, 16 # 8-byte Folded Spill +; NORMV-NEXT: st.d $s6, $sp, 8 # 8-byte Folded Spill +; NORMV-NEXT: .cfi_offset 1, -8 +; NORMV-NEXT: .cfi_offset 22, -16 +; NORMV-NEXT: .cfi_offset 23, -24 +; NORMV-NEXT: .cfi_offset 24, -32 +; NORMV-NEXT: .cfi_offset 25, -40 +; NORMV-NEXT: .cfi_offset 26, -48 +; NORMV-NEXT: .cfi_offset 27, -56 +; NORMV-NEXT: .cfi_offset 28, -64 +; NORMV-NEXT: .cfi_offset 29, -72 +; NORMV-NEXT: ld.d $s6, $sp, 80 +; NORMV-NEXT: move $s2, $a7 +; NORMV-NEXT: move $s4, $a5 +; NORMV-NEXT: move $s0, $a4 +; NORMV-NEXT: move $fp, $a3 +; NORMV-NEXT: move $s5, $a2 +; NORMV-NEXT: move $s3, $a1 +; NORMV-NEXT: move $s1, $a0 +; NORMV-NEXT: move $a0, $zero +; NORMV-NEXT: jirl $ra, $zero, 0 +; NORMV-NEXT: beqz $s4, .LBB24_2 +; NORMV-NEXT: # %bb.1: # %if.then26 +; NORMV-NEXT: addi.d $a0, $s6, 1 +; NORMV-NEXT: addi.w $s6, $a0, 0 +; NORMV-NEXT: beqz $s4, .LBB24_3 +; NORMV-NEXT: b .LBB24_6 +; NORMV-NEXT: .LBB24_2: +; NORMV-NEXT: move $s3, $s5 +; NORMV-NEXT: bnez $s4, .LBB24_6 +; NORMV-NEXT: .LBB24_3: # %for.cond32.preheader.preheader +; NORMV-NEXT: ld.d $a0, $sp, 96 +; NORMV-NEXT: ld.d $a1, $sp, 88 +; NORMV-NEXT: addi.w $a2, $s6, 0 +; NORMV-NEXT: sltui $a2, $a2, 1 +; NORMV-NEXT: masknez $a0, $a0, $a2 +; NORMV-NEXT: vreplgr2vr.w $vr0, $s6 +; NORMV-NEXT: andi $a1, $a1, 1 +; NORMV-NEXT: .p2align 4, , 16 +; NORMV-NEXT: .LBB24_4: # %for.cond32.preheader +; NORMV-NEXT: # =>This Inner Loop Header: Depth=1 +; NORMV-NEXT: st.w $a0, $zero, 0 +; NORMV-NEXT: vst $vr0, $s2, 0 +; NORMV-NEXT: bnez $a1, .LBB24_4 +; NORMV-NEXT: # %bb.5: # %for.cond.cleanup +; NORMV-NEXT: move $a0, $zero +; NORMV-NEXT: move $a1, $s3 +; NORMV-NEXT: move $a2, $zero +; NORMV-NEXT: move $a3, $zero +; NORMV-NEXT: move $a4, $zero +; NORMV-NEXT: move $a5, $zero +; NORMV-NEXT: jirl $ra, $zero, 0 +; NORMV-NEXT: move $a0, $s1 +; NORMV-NEXT: move $a1, $s0 +; NORMV-NEXT: move $a2, $zero +; NORMV-NEXT: move $a3, $fp +; NORMV-NEXT: jirl $ra, $zero, 0 +; NORMV-NEXT: .LBB24_6: # %for.cond32.preheader.us.preheader +; NORMV-NEXT: move $a0, $zero +; NORMV-NEXT: ld.d $s6, $sp, 8 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $s5, $sp, 16 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $s4, $sp, 24 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $s3, $sp, 32 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $s2, $sp, 40 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $s1, $sp, 48 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $s0, $sp, 56 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $fp, $sp, 64 # 8-byte Folded Reload +; NORMV-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload +; NORMV-NEXT: addi.d $sp, $sp, 80 +; NORMV-NEXT: ret +entry: + %call4.i.i.i.i = tail call i32 null(ptr null) + %conv = trunc i64 %1 to i32 + br i1 %I, label %if.then26, label %if.end30 + +if.then26: ; preds = %entry + %sub27 = add i32 %conv, 1 + br label %if.end30 + +if.end30: ; preds = %if.then26, %entry + %Op1.addr.0 = phi ptr [ %Op0, %if.then26 ], [ %Op1, %entry ] + %ShiftVal.1 = phi i32 [ %sub27, %if.then26 ], [ %conv, %entry ] + br i1 %I, label %for.cond32.preheader.us.preheader, label %for.cond32.preheader.preheader + +for.cond32.preheader.preheader: ; preds = %if.end30 + %cmp37 = icmp ult i32 %ShiftVal.1, 1 + %spec.select = select i1 %cmp37, i32 0, i32 %2 + br label %for.cond32.preheader + +for.cond32.preheader.us.preheader: ; preds = %if.end30 + ret ptr null + +for.cond32.preheader: ; preds = %for.cond32.preheader, %for.cond32.preheader.preheader + store i32 %spec.select, ptr null, align 4 + %3 = insertelement <4 x i32> zeroinitializer, i32 %ShiftVal.1, i64 0 + %4 = shufflevector <4 x i32> %3, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer + store <4 x i32> %4, ptr %a.1, align 4 + br i1 %c, label %for.cond32.preheader, label %for.cond.cleanup + +for.cond.cleanup: ; preds = %for.cond32.preheader + %call48 = call ptr null(ptr null, ptr %Op1.addr.0, ptr null, [2 x i64] zeroinitializer, ptr null) + %call49 = call fastcc ptr null(ptr %B, ptr %M, ptr null, ptr %P) + ret ptr null +} -- cgit v1.2.3 From b2b1eec2b249698337d90a77c000340f0248c9cd Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 06:58:17 -0800 Subject: [OpenACC] enable 'copyin' clause sema for 'data'/'enter data' stop reporting 'copyin' as not implemented on a data/enter data construct, and enforce sema rules. --- clang/lib/Sema/SemaOpenACC.cpp | 10 +- .../test/AST/ast-print-openacc-data-construct.cpp | 33 ++++- clang/test/SemaOpenACC/data-construct-ast.cpp | 6 + .../test/SemaOpenACC/data-construct-async-clause.c | 6 - .../test/SemaOpenACC/data-construct-copyin-ast.cpp | 137 +++++++++++++++++++++ .../SemaOpenACC/data-construct-copyin-clause.c | 71 +++++++++++ clang/test/SemaOpenACC/data-construct-if-ast.cpp | 4 + clang/test/SemaOpenACC/data-construct-if-clause.c | 2 - clang/test/SemaOpenACC/data-construct-wait-ast.cpp | 24 ++++ .../test/SemaOpenACC/data-construct-wait-clause.c | 6 - clang/test/SemaOpenACC/data-construct.cpp | 2 - 11 files changed, 275 insertions(+), 26 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-copyin-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-copyin-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index d1425aa4eecc..91a5cd0d71b2 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -962,11 +962,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyInClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 3e828b594bc9..d5d034f5d0bc 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -14,8 +14,7 @@ void foo() { #pragma acc data device_type(int) ; -// CHECK: #pragma acc enter data -// CHECK-NOT: copyin(Var) +// CHECK: #pragma acc enter data copyin(Var) #pragma acc enter data copyin(Var) ; // CHECK: #pragma acc exit data @@ -34,7 +33,7 @@ void foo() { // CHECK: #pragma acc data default(none) if(i == array[1]) #pragma acc data default(none) if(i == array[1]) ; -// CHECK: #pragma acc enter data if(i == array[1]) +// CHECK: #pragma acc enter data copyin(Var) if(i == array[1]) #pragma acc enter data copyin(Var) if(i == array[1]) ; // CHECK: #pragma acc exit data if(i == array[1]) @@ -47,7 +46,7 @@ void foo() { // CHECK: #pragma acc data default(none) async(i) #pragma acc data default(none) async(i) ; -// CHECK: #pragma acc enter data async(i) +// CHECK: #pragma acc enter data copyin(i) async(i) #pragma acc enter data copyin(i) async(i) // CHECK: #pragma acc exit data async #pragma acc exit data copyout(i) async @@ -56,7 +55,7 @@ void foo() { #pragma acc data default(none) wait() ; -// CHECK: #pragma acc enter data wait() +// CHECK: #pragma acc enter data copyin(Var) wait() #pragma acc enter data copyin(Var) wait() // CHECK: #pragma acc exit data wait(*iPtr, i) @@ -66,7 +65,7 @@ void foo() { #pragma acc data default(none) wait(queues:*iPtr, i) ; -// CHECK: #pragma acc enter data wait(devnum: i : *iPtr, i) +// CHECK: #pragma acc enter data copyin(Var) wait(devnum: i : *iPtr, i) #pragma acc enter data copyin(Var) wait(devnum:i:*iPtr, i) // CHECK: #pragma acc exit data wait(devnum: i : queues: *iPtr, i) @@ -79,4 +78,26 @@ void foo() { // CHECK: #pragma acc data default(present) #pragma acc data default(present) ; + +// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) +#pragma acc data default(none) no_create(i, array[1], array, array[1:2]) + ; + +// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) +// CHECK-NOT: present(i, array[1], array, array[1:2]) +#pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2]) + ; + +// CHECK: #pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) +#pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) + ; + +// CHECK: #pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly: i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2]) +#pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly:i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2]) + +// CHECK-NOT: #pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) +#pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) + +// CHECK: #pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) +#pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) } diff --git a/clang/test/SemaOpenACC/data-construct-ast.cpp b/clang/test/SemaOpenACC/data-construct-ast.cpp index 60ed295fcd42..90763daf690f 100644 --- a/clang/test/SemaOpenACC/data-construct-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-ast.cpp @@ -27,6 +27,8 @@ void NormalFunc() { // CHECK: NullStmt #pragma acc enter data copyin(Var) // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data #pragma acc host_data use_device(Var) @@ -55,6 +57,8 @@ void TemplFunc() { // CHECK: NullStmt #pragma acc enter data copyin(Var) // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data #pragma acc host_data use_device(Var) @@ -78,6 +82,8 @@ void TemplFunc() { // CHECK: NullStmt // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data diff --git a/clang/test/SemaOpenACC/data-construct-async-clause.c b/clang/test/SemaOpenACC/data-construct-async-clause.c index 053cc976939b..4e75c2b56a5a 100644 --- a/clang/test/SemaOpenACC/data-construct-async-clause.c +++ b/clang/test/SemaOpenACC/data-construct-async-clause.c @@ -5,10 +5,8 @@ void Test() { struct NotConvertible{} NC; // No special rules for this clause on the data constructs, so not much to // test that isn't covered by combined/compute. - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(I) async(I) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(I) async(I) // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(I) async(I) @@ -17,11 +15,9 @@ void Test() { #pragma acc host_data use_device(I) async(I) ; - // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc data copyin(NC) async(NC) ; - // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc enter data copyin(NC) async(NC) // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} @@ -32,12 +28,10 @@ void Test() { #pragma acc host_data use_device(NC) async(NC) ; - // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+2{{OpenACC 'async' clause cannot appear more than once on a 'data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc data copyin(I) async(I) async(I) ; - // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+2{{expected ')'}} // expected-note@+1{{to match this '('}} #pragma acc enter data copyin(I) async(I, I) diff --git a/clang/test/SemaOpenACC/data-construct-copyin-ast.cpp b/clang/test/SemaOpenACC/data-construct-copyin-ast.cpp new file mode 100644 index 000000000000..fd21d60c8443 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyin-ast.cpp @@ -0,0 +1,137 @@ +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data copyin(GlobalArray) pcopyin(readonly:PointerParam[Global]) present_or_copyin(Global) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt + +#pragma acc enter data copyin(GlobalArray) pcopyin(readonly:PointerParam[Global]) present_or_copyin(Global) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' +} + +template +void TemplUses(T t, U u) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + +#pragma acc data copyin(t) pcopyin(readonly: NTTP, u) present_or_copyin(u[0:t]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: NullStmt + +#pragma acc enter data copyin(t) pcopyin(readonly: NTTP, u) present_or_copyin(u[0:t]) + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: TemplateArgument type 'int *' + // CHECK-NEXT: PointerType{{.*}} 'int *' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: NullStmt + + // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}} enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyin clause : readonly + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copyin clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' +} + +void Inst() { + static constexpr unsigned CEVar = 1; + int i; + TemplUses(i, &i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-copyin-clause.c b/clang/test/SemaOpenACC/data-construct-copyin-clause.c new file mode 100644 index 000000000000..36d190b81480 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyin-clause.c @@ -0,0 +1,71 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data copyin(LocalInt) + ; +#pragma acc enter data copyin(LocalInt) + + // expected-warning@+1{{OpenACC clause name 'pcopyin' is a deprecated clause name and is now an alias for 'copyin'}} +#pragma acc data pcopyin(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'present_or_copyin' is a deprecated clause name and is now an alias for 'copyin'}} +#pragma acc data present_or_copyin(LocalInt) + ; + + // Valid cases: +#pragma acc data copyin(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data copyin(LocalArray[2:1]) + ; +#pragma acc data copyin(readonly:LocalArray[2:1]) + ; + +#pragma acc data copyin(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data copyin(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data copyin(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin((float)ArrayParam[2]) + ; + // expected-error@+2{{invalid tag 'invalid' on 'copyin' clause}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyin(invalid:(float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'copyin' clause is not valid on 'exit data' directive}} +#pragma acc exit data copyin(LocalInt) + // expected-error@+1{{OpenACC 'pcopyin' clause is not valid on 'host_data' directive}} +#pragma acc host_data pcopyin(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct-if-ast.cpp b/clang/test/SemaOpenACC/data-construct-if-ast.cpp index a522b30357df..24bc8ffc8fe0 100644 --- a/clang/test/SemaOpenACC/data-construct-if-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-if-ast.cpp @@ -52,6 +52,8 @@ void TemplFunc() { #pragma acc enter data copyin(Global) if(typename T::IntTy{}) ; // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename T::IntTy' 'typename T::IntTy' // CHECK-NEXT: InitListExpr{{.*}} 'void' @@ -93,6 +95,8 @@ void TemplFunc() { // CHECK-NEXT: NullStmt // CHECK-NEXT: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename InstTy::IntTy':'int' functional cast to typename struct InstTy::IntTy diff --git a/clang/test/SemaOpenACC/data-construct-if-clause.c b/clang/test/SemaOpenACC/data-construct-if-clause.c index 906b252d219b..3f80bb8c4d00 100644 --- a/clang/test/SemaOpenACC/data-construct-if-clause.c +++ b/clang/test/SemaOpenACC/data-construct-if-clause.c @@ -9,10 +9,8 @@ void Foo() { #pragma acc data default(present) if(1) if (2) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(Var) if(1) - // expected-warning@+3{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'enter data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc enter data copyin(Var) if(1) if (2) diff --git a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp index 40409099d805..20d4affec1c8 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp @@ -21,11 +21,15 @@ void NormalUses() { #pragma acc data copyin(I) wait ; // CHECK-NEXT: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> // CHECK-NEXT: NullStmt #pragma acc enter data copyin(I) wait() // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> #pragma acc exit data copyout(I) wait(some_int(), some_long()) @@ -41,6 +45,8 @@ void NormalUses() { #pragma acc data copyin(I) wait(queues:some_int(), some_long()) ; // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause has queues tag // CHECK-NEXT: <<>> // CHECK-NEXT: CallExpr{{.*}}'int' @@ -52,6 +58,8 @@ void NormalUses() { // CHECK-NEXT: NullStmt #pragma acc enter data copyin(I) wait(devnum: some_int() :some_int(), some_long()) // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'int' // CHECK-NEXT: wait clause has devnum // CHECK-NEXT: CallExpr{{.*}}'int' // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' @@ -101,12 +109,16 @@ void TemplUses(U u) { #pragma acc data copyin(I) wait ; // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> // CHECK-NEXT: NullStmt #pragma acc enter data copyin(I) wait() // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> @@ -121,6 +133,8 @@ void TemplUses(U u) { #pragma acc data copyin(I) wait(queues: U::value, u) ; // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause has queues tag // CHECK-NEXT: <<>> // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue @@ -130,6 +144,8 @@ void TemplUses(U u) { #pragma acc enter data copyin(I) wait(devnum:u:queues: U::value, u) // CHECK: OpenACCEnterDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'U' // CHECK-NEXT: wait clause has devnum has queues tag // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue @@ -156,11 +172,15 @@ void TemplUses(U u) { // CHECK-NEXT: VarDecl // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> // CHECK-NEXT: NullStmt // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> @@ -176,6 +196,8 @@ void TemplUses(U u) { // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar // CHECK: OpenACCDataConstruct{{.*}}data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause has queues tag // CHECK-NEXT: <<>> // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' @@ -188,6 +210,8 @@ void TemplUses(U u) { // CHECK-NEXT: NullStmt // CHECK: OpenACCEnterDataConstruct{{.*}}enter data + // CHECK-NEXT: copyin clause + // CHECK-NEXT: DeclRefExpr{{.*}}'I' 'HasInt' // CHECK-NEXT: wait clause has devnum has queues tag // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' diff --git a/clang/test/SemaOpenACC/data-construct-wait-clause.c b/clang/test/SemaOpenACC/data-construct-wait-clause.c index 50a29df8b03b..59cd793de743 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-clause.c +++ b/clang/test/SemaOpenACC/data-construct-wait-clause.c @@ -7,11 +7,9 @@ int getI(); void uses() { int arr[5]; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(arr[0]) wait ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(arr[0]) wait() // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} @@ -22,23 +20,19 @@ void uses() { #pragma acc host_data use_device(arr[0]) wait(getS(), getI()) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(arr[0]) wait(devnum:getS(): getI()) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(arr[0]) wait(devnum:getS(): queues: getI()) wait(devnum:getI(): queues: getS(), getI(), 5) // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc exit data copyout(arr[0]) wait(devnum:NC : 5) - // expected-warning@+2{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc data copyin(arr[0]) wait(devnum:5 : NC) ; - // expected-warning@+4{{OpenACC clause 'copyin' not yet implemented}} // expected-error@+3{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}} // expected-error@+2{{OpenACC clause 'wait' requires expression of integer type ('int[5]' invalid)}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 3f95f4055802..2ae1d14b8507 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -23,7 +23,6 @@ void AtLeastOneOf() { // Data #pragma acc data copy(Var) ; - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc data copyin(Var) ; // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} @@ -63,7 +62,6 @@ void AtLeastOneOf() { ; // Enter Data - // expected-warning@+1{{OpenACC clause 'copyin' not yet implemented}} #pragma acc enter data copyin(Var) #pragma acc enter data create(Var) // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} -- cgit v1.2.3 From 1da0730ba5994537119ed61205a599cb3929c43a Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 07:32:49 -0800 Subject: [OpenACC] enable 'copyout' clause sema for data constructs Same as the previous few, this just enables copyout for data constructs and ensures we have sufficient test coverage. --- clang/lib/Sema/SemaOpenACC.cpp | 10 +- .../test/AST/ast-print-openacc-data-construct.cpp | 13 +- clang/test/SemaOpenACC/data-construct-ast.cpp | 6 + .../test/SemaOpenACC/data-construct-async-clause.c | 2 - .../SemaOpenACC/data-construct-copyout-ast.cpp | 137 +++++++++++++++++++++ .../SemaOpenACC/data-construct-copyout-clause.c | 71 +++++++++++ clang/test/SemaOpenACC/data-construct-if-ast.cpp | 4 + clang/test/SemaOpenACC/data-construct-if-clause.c | 2 - clang/test/SemaOpenACC/data-construct-wait-ast.cpp | 12 ++ .../test/SemaOpenACC/data-construct-wait-clause.c | 2 - clang/test/SemaOpenACC/data-construct.cpp | 2 - 11 files changed, 242 insertions(+), 19 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-copyout-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-copyout-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 91a5cd0d71b2..6906fd00822f 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -981,11 +981,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyInClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitCopyOutClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index d5d034f5d0bc..65ab0158b485 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -17,8 +17,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(Var) #pragma acc enter data copyin(Var) ; -// CHECK: #pragma acc exit data -// CHECK-NOT: copyout(Var) +// CHECK: #pragma acc exit data copyout(Var) #pragma acc exit data copyout(Var) ; // CHECK: #pragma acc host_data @@ -36,7 +35,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(Var) if(i == array[1]) #pragma acc enter data copyin(Var) if(i == array[1]) ; -// CHECK: #pragma acc exit data if(i == array[1]) +// CHECK: #pragma acc exit data copyout(Var) if(i == array[1]) #pragma acc exit data copyout(Var) if(i == array[1]) ; // CHECK: #pragma acc host_data if(i == array[1]) @@ -48,7 +47,7 @@ void foo() { ; // CHECK: #pragma acc enter data copyin(i) async(i) #pragma acc enter data copyin(i) async(i) -// CHECK: #pragma acc exit data async +// CHECK: #pragma acc exit data copyout(i) async #pragma acc exit data copyout(i) async // CHECK: #pragma acc data default(none) wait @@ -58,7 +57,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(Var) wait() #pragma acc enter data copyin(Var) wait() -// CHECK: #pragma acc exit data wait(*iPtr, i) +// CHECK: #pragma acc exit data copyout(Var) wait(*iPtr, i) #pragma acc exit data copyout(Var) wait(*iPtr, i) // CHECK: #pragma acc data default(none) wait(queues: *iPtr, i) @@ -68,7 +67,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(Var) wait(devnum: i : *iPtr, i) #pragma acc enter data copyin(Var) wait(devnum:i:*iPtr, i) -// CHECK: #pragma acc exit data wait(devnum: i : queues: *iPtr, i) +// CHECK: #pragma acc exit data copyout(Var) wait(devnum: i : queues: *iPtr, i) #pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i) // CHECK: #pragma acc data default(none) @@ -95,7 +94,7 @@ void foo() { // CHECK: #pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly: i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2]) #pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly:i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2]) -// CHECK-NOT: #pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) +// CHECK: #pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) #pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2]) // CHECK: #pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) diff --git a/clang/test/SemaOpenACC/data-construct-ast.cpp b/clang/test/SemaOpenACC/data-construct-ast.cpp index 90763daf690f..f299fd04581a 100644 --- a/clang/test/SemaOpenACC/data-construct-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-ast.cpp @@ -31,6 +31,8 @@ void NormalFunc() { // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' #pragma acc host_data use_device(Var) while (Var); // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data @@ -61,6 +63,8 @@ void TemplFunc() { // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' #pragma acc exit data copyout(Var) // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'T' #pragma acc host_data use_device(Var) while (Var); // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data @@ -86,6 +90,8 @@ void TemplFunc() { // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Var' 'int' // CHECK-NEXT: OpenACCHostDataConstruct{{.*}} host_data // CHECK-NEXT: WhileStmt diff --git a/clang/test/SemaOpenACC/data-construct-async-clause.c b/clang/test/SemaOpenACC/data-construct-async-clause.c index 4e75c2b56a5a..7173b2f0be7d 100644 --- a/clang/test/SemaOpenACC/data-construct-async-clause.c +++ b/clang/test/SemaOpenACC/data-construct-async-clause.c @@ -8,7 +8,6 @@ void Test() { #pragma acc data copyin(I) async(I) ; #pragma acc enter data copyin(I) async(I) - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(I) async(I) // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} // expected-error@+1{{OpenACC 'async' clause is not valid on 'host_data' directive}} @@ -20,7 +19,6 @@ void Test() { ; // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc enter data copyin(NC) async(NC) - // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} // expected-error@+1{{OpenACC clause 'async' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc exit data copyout(NC) async(NC) // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} diff --git a/clang/test/SemaOpenACC/data-construct-copyout-ast.cpp b/clang/test/SemaOpenACC/data-construct-copyout-ast.cpp new file mode 100644 index 000000000000..38e6e7b476fe --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyout-ast.cpp @@ -0,0 +1,137 @@ +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-deprecated-clause-alias -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data copyout(GlobalArray) pcopyout(zero:PointerParam[Global]) present_or_copyout(Global) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: NullStmt + +#pragma acc exit data copyout(GlobalArray) pcopyout(zero:PointerParam[Global]) present_or_copyout(Global) + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: present_or_copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' +} + +template +void TemplUses(T t, U u) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' + // CHECK-NEXT: CompoundStmt + +#pragma acc data copyout(t) pcopyout(zero: NTTP, u) present_or_copyout(u[0:t]) + ; + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyout clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: NullStmt + +#pragma acc exit data copyout(t) pcopyout(zero: NTTP, u) present_or_copyout(u[0:t]) + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present_or_copyout clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: TemplateArgument type 'int *' + // CHECK-NEXT: PointerType{{.*}} 'int *' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copyout clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: NullStmt + + // CHECK-NEXT: OpenACCExitDataConstruct{{.*}} exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: pcopyout clause : zero + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present_or_copyout clause + // CHECK-NEXT: ArraySectionExpr + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' +} + +void Inst() { + static constexpr unsigned CEVar = 1; + int i; + TemplUses(i, &i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-copyout-clause.c b/clang/test/SemaOpenACC/data-construct-copyout-clause.c new file mode 100644 index 000000000000..77c19d80ca7b --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-copyout-clause.c @@ -0,0 +1,71 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data copyout(LocalInt) + ; +#pragma acc exit data copyout(LocalInt) + + // expected-warning@+1{{OpenACC clause name 'pcopyout' is a deprecated clause name and is now an alias for 'copyout'}} +#pragma acc data pcopyout(LocalInt) + ; + + // expected-warning@+1{{OpenACC clause name 'present_or_copyout' is a deprecated clause name and is now an alias for 'copyout'}} +#pragma acc data present_or_copyout(LocalInt) + ; + + // Valid cases: +#pragma acc data copyout(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data copyout(LocalArray[2:1]) + ; +#pragma acc data copyout(zero:LocalArray[2:1]) + ; + +#pragma acc data copyout(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyout(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyout(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data copyout(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data copyout(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyout((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyout((float)ArrayParam[2]) + ; + // expected-error@+2{{invalid tag 'invalid' on 'copyout' clause}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data copyout(invalid:(float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'copyout' clause is not valid on 'enter data' directive}} +#pragma acc enter data copyout(LocalInt) + // expected-error@+1{{OpenACC 'pcopyout' clause is not valid on 'host_data' directive}} +#pragma acc host_data pcopyout(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct-if-ast.cpp b/clang/test/SemaOpenACC/data-construct-if-ast.cpp index 24bc8ffc8fe0..3b810a724c51 100644 --- a/clang/test/SemaOpenACC/data-construct-if-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-if-ast.cpp @@ -62,6 +62,8 @@ void TemplFunc() { #pragma acc exit data copyout(Global) if(T::SomeFloat) ; // CHECK-NEXT: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T' @@ -104,6 +106,8 @@ void TemplFunc() { // CHECK-NEXT: NullStmt // CHECK-NEXT: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int' // CHECK-NEXT: if clause // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' diff --git a/clang/test/SemaOpenACC/data-construct-if-clause.c b/clang/test/SemaOpenACC/data-construct-if-clause.c index 3f80bb8c4d00..0a7989e80fc3 100644 --- a/clang/test/SemaOpenACC/data-construct-if-clause.c +++ b/clang/test/SemaOpenACC/data-construct-if-clause.c @@ -15,9 +15,7 @@ void Foo() { // expected-note@+1{{previous clause is here}} #pragma acc enter data copyin(Var) if(1) if (2) - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(Var) if(1) - // expected-warning@+3{{OpenACC clause 'copyout' not yet implemented}} // expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'exit data' directive}} // expected-note@+1{{previous clause is here}} #pragma acc exit data copyout(Var) if(1) if (2) diff --git a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp index 20d4affec1c8..7fb82313669d 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-wait-ast.cpp @@ -34,6 +34,8 @@ void NormalUses() { // CHECK-NEXT: <<>> #pragma acc exit data copyout(I) wait(some_int(), some_long()) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'int' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> // CHECK-NEXT: CallExpr{{.*}}'int' @@ -72,6 +74,8 @@ void NormalUses() { // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' #pragma acc exit data copyout(I) wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long()) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'int' // CHECK-NEXT: wait clause has devnum has queues tag // CHECK-NEXT: CallExpr{{.*}}'int' // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' @@ -124,6 +128,8 @@ void TemplUses(U u) { #pragma acc exit data copyout(I) wait(U::value, u) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'U' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue @@ -154,6 +160,8 @@ void TemplUses(U u) { #pragma acc exit data copyout(I) wait(devnum:u: U::value, u) // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'U' // CHECK-NEXT: wait clause has devnum // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '' lvalue @@ -185,6 +193,8 @@ void TemplUses(U u) { // CHECK-NEXT: <<>> // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'HasInt' // CHECK-NEXT: wait clause // CHECK-NEXT: <<>> // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' @@ -226,6 +236,8 @@ void TemplUses(U u) { // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar // CHECK: OpenACCExitDataConstruct{{.*}}exit data + // CHECK-NEXT: copyout clause + // CHECK-NEXT: DeclRefExpr{{.*}} 'I' 'HasInt' // CHECK-NEXT: wait clause has devnum // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' diff --git a/clang/test/SemaOpenACC/data-construct-wait-clause.c b/clang/test/SemaOpenACC/data-construct-wait-clause.c index 59cd793de743..dffcba34e7b3 100644 --- a/clang/test/SemaOpenACC/data-construct-wait-clause.c +++ b/clang/test/SemaOpenACC/data-construct-wait-clause.c @@ -12,7 +12,6 @@ void uses() { #pragma acc enter data copyin(arr[0]) wait() - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(arr[0]) wait(getS(), getI()) // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} @@ -25,7 +24,6 @@ void uses() { #pragma acc enter data copyin(arr[0]) wait(devnum:getS(): queues: getI()) wait(devnum:getI(): queues: getS(), getI(), 5) - // expected-warning@+2{{OpenACC clause 'copyout' not yet implemented}} // expected-error@+1{{OpenACC clause 'wait' requires expression of integer type ('struct NotConvertible' invalid)}} #pragma acc exit data copyout(arr[0]) wait(devnum:NC : 5) diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 2ae1d14b8507..01ccaeba81b4 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -25,7 +25,6 @@ void AtLeastOneOf() { ; #pragma acc data copyin(Var) ; - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc data copyout(Var) ; #pragma acc data create(Var) @@ -76,7 +75,6 @@ void AtLeastOneOf() { #pragma acc enter data // Exit Data - // expected-warning@+1{{OpenACC clause 'copyout' not yet implemented}} #pragma acc exit data copyout(Var) // expected-warning@+1{{OpenACC clause 'delete' not yet implemented}} #pragma acc exit data delete(Var) -- cgit v1.2.3 From fcb1591b46f12b8908a8cdb252611708820102f8 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Fri, 13 Dec 2024 08:00:45 -0800 Subject: [IR] Migrate away from PointerUnion::{is,get} (NFC) (#119802) Note that PointerUnion::{is,get} have been soft deprecated in PointerUnion.h: // FIXME: Replace the uses of is(), get() and dyn_cast() with // isa, cast and the llvm::dyn_cast I'm not touching PointerUnion::dyn_cast for now because it's a bit complicated; we could blindly migrate it to dyn_cast_if_present, but we should probably use dyn_cast when the operand is known to be non-null. --- mlir/lib/IR/AffineMap.cpp | 4 ++-- mlir/lib/IR/Builders.cpp | 2 +- mlir/lib/IR/OperationSupport.cpp | 4 ++-- mlir/lib/IR/Region.cpp | 4 ++-- mlir/lib/IR/SymbolTable.cpp | 4 ++-- mlir/lib/IR/TypeRange.cpp | 2 +- mlir/lib/IR/Verifier.cpp | 13 ++++++------- 7 files changed, 16 insertions(+), 17 deletions(-) diff --git a/mlir/lib/IR/AffineMap.cpp b/mlir/lib/IR/AffineMap.cpp index 719a81ec057f..8e8a433f331d 100644 --- a/mlir/lib/IR/AffineMap.cpp +++ b/mlir/lib/IR/AffineMap.cpp @@ -753,7 +753,7 @@ AffineMap mlir::foldAttributesIntoMap(Builder &b, AffineMap map, b.getAffineConstantExpr(cast(attr).getInt())); } else { dimReplacements.push_back(b.getAffineDimExpr(numDims++)); - remainingValues.push_back(operands[i].get()); + remainingValues.push_back(cast(operands[i])); } } int64_t numSymbols = 0; @@ -763,7 +763,7 @@ AffineMap mlir::foldAttributesIntoMap(Builder &b, AffineMap map, b.getAffineConstantExpr(cast(attr).getInt())); } else { symReplacements.push_back(b.getAffineSymbolExpr(numSymbols++)); - remainingValues.push_back(operands[i + map.getNumDims()].get()); + remainingValues.push_back(cast(operands[i + map.getNumDims()])); } } return map.replaceDimsAndSymbols(dimReplacements, symReplacements, numDims, diff --git a/mlir/lib/IR/Builders.cpp b/mlir/lib/IR/Builders.cpp index 5397fbabc5c9..edc4709ec3c6 100644 --- a/mlir/lib/IR/Builders.cpp +++ b/mlir/lib/IR/Builders.cpp @@ -553,7 +553,7 @@ LogicalResult OpBuilder::tryFold(Operation *op, return cleanupFailure(); // Ask the dialect to materialize a constant operation for this value. - Attribute attr = foldResult.get(); + Attribute attr = cast(foldResult); auto *constOp = dialect->materializeConstant(cstBuilder, attr, expectedType, op->getLoc()); if (!constOp) { diff --git a/mlir/lib/IR/OperationSupport.cpp b/mlir/lib/IR/OperationSupport.cpp index bda96509e4c0..957195202d78 100644 --- a/mlir/lib/IR/OperationSupport.cpp +++ b/mlir/lib/IR/OperationSupport.cpp @@ -657,7 +657,7 @@ ValueRange::OwnerT ValueRange::offset_base(const OwnerT &owner, return {value + index}; if (auto *operand = llvm::dyn_cast_if_present(owner)) return {operand + index}; - return owner.get()->getNextResultAtOffset(index); + return cast(owner)->getNextResultAtOffset(index); } /// See `llvm::detail::indexed_accessor_range_base` for details. Value ValueRange::dereference_iterator(const OwnerT &owner, ptrdiff_t index) { @@ -665,7 +665,7 @@ Value ValueRange::dereference_iterator(const OwnerT &owner, ptrdiff_t index) { return value[index]; if (auto *operand = llvm::dyn_cast_if_present(owner)) return operand[index].get(); - return owner.get()->getNextResultAtOffset(index); + return cast(owner)->getNextResultAtOffset(index); } //===----------------------------------------------------------------------===// diff --git a/mlir/lib/IR/Region.cpp b/mlir/lib/IR/Region.cpp index e1caa8979eb4..99ca6c5013c1 100644 --- a/mlir/lib/IR/Region.cpp +++ b/mlir/lib/IR/Region.cpp @@ -271,7 +271,7 @@ RegionRange::OwnerT RegionRange::offset_base(const OwnerT &owner, return region + index; if (auto **region = llvm::dyn_cast_if_present(owner)) return region + index; - return &owner.get()[index]; + return &cast(owner)[index]; } /// See `llvm::detail::indexed_accessor_range_base` for details. Region *RegionRange::dereference_iterator(const OwnerT &owner, @@ -280,5 +280,5 @@ Region *RegionRange::dereference_iterator(const OwnerT &owner, return region[index].get(); if (auto **region = llvm::dyn_cast_if_present(owner)) return region[index]; - return &owner.get()[index]; + return &cast(owner)[index]; } diff --git a/mlir/lib/IR/SymbolTable.cpp b/mlir/lib/IR/SymbolTable.cpp index e83d19553d62..71adfc467611 100644 --- a/mlir/lib/IR/SymbolTable.cpp +++ b/mlir/lib/IR/SymbolTable.cpp @@ -623,7 +623,7 @@ struct SymbolScope { std::optional walk(CallbackT cback) { if (Region *region = llvm::dyn_cast_if_present(limit)) return walkSymbolUses(*region, cback); - return walkSymbolUses(limit.get(), cback); + return walkSymbolUses(cast(limit), cback); } /// This variant is used when the callback type matches a stripped down type: /// void(SymbolTable::SymbolUse use) @@ -643,7 +643,7 @@ struct SymbolScope { std::optional walkSymbolTable(CallbackT &&cback) { if (Region *region = llvm::dyn_cast_if_present(limit)) return ::walkSymbolTable(*region, cback); - return ::walkSymbolTable(limit.get(), cback); + return ::walkSymbolTable(cast(limit), cback); } /// The representation of the symbol within this scope. diff --git a/mlir/lib/IR/TypeRange.cpp b/mlir/lib/IR/TypeRange.cpp index c05c0ce0d254..f8878303727d 100644 --- a/mlir/lib/IR/TypeRange.cpp +++ b/mlir/lib/IR/TypeRange.cpp @@ -32,7 +32,7 @@ TypeRange::TypeRange(ValueRange values) : TypeRange(OwnerT(), values.size()) { else if (auto *operand = llvm::dyn_cast_if_present(owner)) this->base = operand; else - this->base = owner.get(); + this->base = cast(owner); } /// See `llvm::detail::indexed_accessor_range_base` for details. diff --git a/mlir/lib/IR/Verifier.cpp b/mlir/lib/IR/Verifier.cpp index 90ff8ef3b497..961ab75ad118 100644 --- a/mlir/lib/IR/Verifier.cpp +++ b/mlir/lib/IR/Verifier.cpp @@ -274,9 +274,9 @@ LogicalResult OperationVerifier::verifyOperation(Operation &op) { WorkItemEntry &top = worklist.back(); auto visit = [](auto &&visitor, WorkItem w) { - if (w.is()) - return visitor(w.get()); - return visitor(w.get()); + if (auto *o = dyn_cast(w)) + return visitor(o); + return visitor(cast(w)); }; const bool isExit = top.getInt(); @@ -299,10 +299,9 @@ LogicalResult OperationVerifier::verifyOperation(Operation &op) { item))) return failure(); - if (item.is()) { - Block ¤tBlock = *item.get(); + if (Block *currentBlock = dyn_cast(item)) { // Skip "isolated from above operations". - for (Operation &o : llvm::reverse(currentBlock)) { + for (Operation &o : llvm::reverse(*currentBlock)) { if (o.getNumRegions() == 0 || !o.hasTrait()) worklist.emplace_back(&o); @@ -310,7 +309,7 @@ LogicalResult OperationVerifier::verifyOperation(Operation &op) { continue; } - Operation ¤tOp = *item.get(); + Operation ¤tOp = *cast(item); if (verifyRecursively) for (Region ®ion : llvm::reverse(currentOp.getRegions())) for (Block &block : llvm::reverse(region)) -- cgit v1.2.3 From 331f3cc94b3c66eebf5ec462a8f1ee0d7704dd26 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 08:10:35 -0800 Subject: [OpenACC] enable 'present' clause for 'data' construct No additional sema is required once again, so this patch adds testing and enables the clause. --- clang/lib/Sema/SemaOpenACC.cpp | 10 +-- .../test/AST/ast-print-openacc-data-construct.cpp | 6 +- .../SemaOpenACC/data-construct-no_create-ast.cpp | 16 ++--- .../SemaOpenACC/data-construct-present-ast.cpp | 79 ++++++++++++++++++++++ .../SemaOpenACC/data-construct-present-clause.c | 59 ++++++++++++++++ clang/test/SemaOpenACC/data-construct.cpp | 1 - 6 files changed, 156 insertions(+), 15 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-present-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-present-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index 6906fd00822f..dd52d509fd57 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -926,11 +926,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitNoCreateClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitPresentClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, so there // really isn't anything to do here. GCC does some duplicate-finding, though diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 65ab0158b485..c93b22e92f62 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -82,10 +82,12 @@ void foo() { #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) ; -// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) -// CHECK-NOT: present(i, array[1], array, array[1:2]) +// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2]) #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2]) ; +// CHECK: #pragma acc data present(i, array[1], array, array[1:2]) +#pragma acc data present(i, array[1], array, array[1:2]) + ; // CHECK: #pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) #pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) diff --git a/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp b/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp index 6ff521eb4be0..9a0465d45594 100644 --- a/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp +++ b/clang/test/SemaOpenACC/data-construct-no_create-ast.cpp @@ -44,9 +44,9 @@ void TemplUses(T t, U u) { // CHECK-NEXT: OpenACCDataConstruct{{.*}} data // CHECK-NEXT: no_create clause // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' - // TODO_CHECK-NEXT: present clause - // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' - // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' + // CHECK-NEXT: present clause + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U' // CHECK-NEXT: NullStmt // Check the instantiated versions of the above. @@ -66,11 +66,11 @@ void TemplUses(T t, U u) { // CHECK-NEXT: OpenACCDataConstruct{{.*}} data // CHECK-NEXT: no_create clause // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' - // TODO_CHECK-NEXT: present clause - // TODO_CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue - // TODO_CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP - // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' - // TODO_CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' + // CHECK-NEXT: present clause + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *' // CHECK-NEXT: NullStmt } diff --git a/clang/test/SemaOpenACC/data-construct-present-ast.cpp b/clang/test/SemaOpenACC/data-construct-present-ast.cpp new file mode 100644 index 000000000000..2a2d81f3f248 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-present-ast.cpp @@ -0,0 +1,79 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; + +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data default(none) present(GlobalArray, PointerParam[Global]) + for(int i = 0; i < 5; ++i); + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(none) + // CHECK-NEXT: present clause + // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]' + // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *' + // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt +} + +template +void TemplUses(T t) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' + // CHECK-NEXT: CompoundStmt + +#pragma acc data default(none) present(NTTP, t) + for(int i = 0; i < 5; ++i); + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(none) + // CHECK-NEXT: present clause + // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &' + // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt + + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int)' implicit_instantiation + // CHECK-NEXT: TemplateArgument decl + // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int' + // CHECK-NEXT: CompoundStmt + +// #pragma acc parallel seq present(NTTP, t) + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(none) + // CHECK-NEXT: present clause + // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue + // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP + // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int' + // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt + +} + +void Inst() { + static constexpr unsigned CEVar = 1; + TemplUses(5); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-present-clause.c b/clang/test/SemaOpenACC/data-construct-present-clause.c new file mode 100644 index 000000000000..3128f532faf3 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-present-clause.c @@ -0,0 +1,59 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +typedef struct IsComplete { + struct S { int A; } CompositeMember; + int ScalarMember; + float ArrayMember[5]; + void *PointerMember; +} Complete; +void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { + int LocalInt; + short *LocalPointer; + float LocalArray[5]; + Complete LocalComposite; + // Check Appertainment: +#pragma acc data default(none) present(LocalInt) + ; + + // Valid cases: +#pragma acc data default(none) present(LocalInt, LocalPointer, LocalArray) + ; +#pragma acc data default(none) present(LocalArray[2:1]) + ; + +#pragma acc data default(none) present(LocalComposite.ScalarMember, LocalComposite.ScalarMember) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data default(none) present(1 + IntParam) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data default(none) present(+IntParam) + ; + + // expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} +#pragma acc data default(none) present(PointerParam[2:]) + ; + + // expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} +#pragma acc data default(none) present(ArrayParam[2:5]) + ; + + // expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data default(none) present((float*)ArrayParam[2:5]) + ; + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data default(none) present((float)ArrayParam[2]) + ; + + // expected-error@+1{{OpenACC 'present' clause is not valid on 'enter data' directive}} +#pragma acc enter data copyin(LocalInt) present(LocalInt) + // expected-error@+1{{OpenACC 'present' clause is not valid on 'exit data' directive}} +#pragma acc exit data copyout(LocalInt) present(LocalInt) + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} + // expected-error@+1{{OpenACC 'present' clause is not valid on 'host_data' directive}} +#pragma acc host_data use_device(LocalInt) present(LocalInt) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 01ccaeba81b4..79c65d06d005 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -31,7 +31,6 @@ void AtLeastOneOf() { ; #pragma acc data no_create(Var) ; - // expected-warning@+1{{OpenACC clause 'present' not yet implemented}} #pragma acc data present(Var) ; // expected-warning@+1{{OpenACC clause 'deviceptr' not yet implemented}} -- cgit v1.2.3 From 5225f1b4355e4ad9fb0939fded88dc6189be29fd Mon Sep 17 00:00:00 2001 From: Tibor Dusnoki Date: Fri, 13 Dec 2024 17:28:37 +0100 Subject: [BOLT][merge-fdata] Fix basic sample profile aggregation without LBR info (#118481) When a basic sample profile is gathered without LBR info, the generated profile contains a "no-lbr" tag in the first line of the fdata file. This PR fixes merge-fdata to recognize and save this tag to the output file. --- bolt/test/merge-fdata-bat-no-lbr.test | 20 ++++++++++++++++++++ bolt/test/merge-fdata-lbr-mode.test | 15 +++++++++++++++ bolt/test/merge-fdata-mixed-bat-no-lbr.test | 16 ++++++++++++++++ bolt/test/merge-fdata-mixed-mode.test | 15 +++++++++++++++ bolt/test/merge-fdata-no-lbr-mode.test | 18 ++++++++++++++++++ bolt/tools/merge-fdata/merge-fdata.cpp | 20 +++++++++++++++++++- 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 bolt/test/merge-fdata-bat-no-lbr.test create mode 100644 bolt/test/merge-fdata-lbr-mode.test create mode 100644 bolt/test/merge-fdata-mixed-bat-no-lbr.test create mode 100644 bolt/test/merge-fdata-mixed-mode.test create mode 100644 bolt/test/merge-fdata-no-lbr-mode.test diff --git a/bolt/test/merge-fdata-bat-no-lbr.test b/bolt/test/merge-fdata-bat-no-lbr.test new file mode 100644 index 000000000000..fd5cd1626335 --- /dev/null +++ b/bolt/test/merge-fdata-bat-no-lbr.test @@ -0,0 +1,20 @@ +## Check that merge-fdata correctly handles merging two fdata files with both boltedcollection and no_lbr tags. + +# REQUIRES: system-linux + +# RUN: split-file %s %t +# RUN: merge-fdata %t/a.fdata %t/b.fdata -o %t/merged.fdata +# RUN: FileCheck %s --input-file %t/merged.fdata + +# CHECK: boltedcollection +# CHECK: no_lbr +# CHECK: main 2 + +#--- a.fdata +boltedcollection +no_lbr +main 1 +#--- b.fdata +boltedcollection +no_lbr +main 1 diff --git a/bolt/test/merge-fdata-lbr-mode.test b/bolt/test/merge-fdata-lbr-mode.test new file mode 100644 index 000000000000..268502a1dd44 --- /dev/null +++ b/bolt/test/merge-fdata-lbr-mode.test @@ -0,0 +1,15 @@ +## Check that merge-fdata tool doesn't falsely print no_lbr when not in no-lbr mode + +# REQUIRES: system-linux + +# RUN: split-file %s %t +# RUN: merge-fdata %t/a.fdata %t/b.fdata -o %t/merged.fdata +# RUN: FileCheck %s --input-file %t/merged.fdata + +# CHECK-NOT: no_lbr +# CHECK: main 2 + +#--- a.fdata +main 1 +#--- b.fdata +main 1 diff --git a/bolt/test/merge-fdata-mixed-bat-no-lbr.test b/bolt/test/merge-fdata-mixed-bat-no-lbr.test new file mode 100644 index 000000000000..b59773d2d505 --- /dev/null +++ b/bolt/test/merge-fdata-mixed-bat-no-lbr.test @@ -0,0 +1,16 @@ +## Check that merge-fdata doesn't incorrectly merge two fdata files with boltedcollection and no_lbr tags. + +# REQUIRES: system-linux + +# RUN: split-file %s %t +# RUN: not merge-fdata %t/a.fdata %t/b.fdata 2>&1 | FileCheck %s + +# CHECK: cannot mix profile collected in BOLT and non-BOLT deployments + +#--- a.fdata +boltedcollection +no_lbr +main 1 +#--- b.fdata +no_lbr +main 1 diff --git a/bolt/test/merge-fdata-mixed-mode.test b/bolt/test/merge-fdata-mixed-mode.test new file mode 100644 index 000000000000..3e1a3bfcb945 --- /dev/null +++ b/bolt/test/merge-fdata-mixed-mode.test @@ -0,0 +1,15 @@ +## Check that merge-fdata tool correctly reports error message +## when trying to merge 'no-lbr' and 'lbr' profiles + +# REQUIRES: system-linux + +# RUN: split-file %s %t +# RUN: not merge-fdata %t/a.fdata %t/b.fdata 2>&1 | FileCheck %s + +# CHECK: cannot mix 'no_lbr' and 'lbr' profiles. + +#--- a.fdata +no_lbr +main 1 +#--- b.fdata +main 1 diff --git a/bolt/test/merge-fdata-no-lbr-mode.test b/bolt/test/merge-fdata-no-lbr-mode.test new file mode 100644 index 000000000000..9dfad99f7999 --- /dev/null +++ b/bolt/test/merge-fdata-no-lbr-mode.test @@ -0,0 +1,18 @@ +## Check that merge-fdata tool correctly processes fdata files with header +## string produced by no-lbr mode (no_lbr) + +# REQUIRES: system-linux + +# RUN: split-file %s %t +# RUN: merge-fdata %t/a.fdata %t/b.fdata -o %t/merged.fdata +# RUN: FileCheck %s --input-file %t/merged.fdata + +# CHECK: no_lbr +# CHECK: main 2 + +#--- a.fdata +no_lbr +main 1 +#--- b.fdata +no_lbr +main 1 diff --git a/bolt/tools/merge-fdata/merge-fdata.cpp b/bolt/tools/merge-fdata/merge-fdata.cpp index 89ca46c1c0a8..39f58a7e8800 100644 --- a/bolt/tools/merge-fdata/merge-fdata.cpp +++ b/bolt/tools/merge-fdata/merge-fdata.cpp @@ -265,6 +265,7 @@ bool isYAML(const StringRef Filename) { void mergeLegacyProfiles(const SmallVectorImpl &Filenames) { errs() << "Using legacy profile format.\n"; std::optional BoltedCollection; + std::optional NoLBRCollection; std::mutex BoltedCollectionMutex; typedef StringMap ProfileTy; @@ -297,7 +298,22 @@ void mergeLegacyProfiles(const SmallVectorImpl &Filenames) { "cannot mix profile collected in BOLT and non-BOLT deployments"); BoltedCollection = false; } - + // Check if the string "no_lbr" is in the first line + // (or second line if BoltedCollection is true) + size_t CheckNoLBRPos = Buf.find('\n'); + if (CheckNoLBRPos != StringRef::npos) { + StringRef FirstLine = Buf.substr(0, CheckNoLBRPos); + if (FirstLine.contains("no_lbr")) { + if (!NoLBRCollection.value_or(true)) + report_error(Filename, "cannot mix 'no_lbr' and 'lbr' profiles"); + NoLBRCollection = true; + Buf = Buf.drop_front(CheckNoLBRPos + 1); + } else { + if (NoLBRCollection.value_or(false)) + report_error(Filename, "cannot mix 'no_lbr' and 'lbr' profiles"); + NoLBRCollection = false; + } + } Profile = &Profiles[tid]; } @@ -336,6 +352,8 @@ void mergeLegacyProfiles(const SmallVectorImpl &Filenames) { if (BoltedCollection.value_or(false)) output() << "boltedcollection\n"; + if (NoLBRCollection.value_or(false)) + output() << "no_lbr\n"; for (const auto &[Key, Value] : MergedProfile) output() << Key << " " << Value << "\n"; -- cgit v1.2.3 From 754499c1e9410d51a4c41e71388c304de61366a0 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 08:37:54 -0800 Subject: [OpenACC] Enable 'deviceptr' clause sema on data construct Another simple implementation, as it uses the same work as the previous implementation, just enabling it for this construct. --- clang/lib/Sema/SemaOpenACC.cpp | 10 ++-- .../test/AST/ast-print-openacc-data-construct.cpp | 6 ++ .../SemaOpenACC/data-construct-deviceptr-ast.cpp | 66 ++++++++++++++++++++ .../SemaOpenACC/data-construct-deviceptr-clause.c | 70 ++++++++++++++++++++++ clang/test/SemaOpenACC/data-construct.cpp | 6 +- 5 files changed, 151 insertions(+), 7 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-deviceptr-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-deviceptr-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index dd52d509fd57..dbf392ba1ed1 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -1035,11 +1035,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitAttachClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitDevicePtrClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. + // Restrictions only properly implemented on 'compute'/'combined'/'data' + // constructs, and 'compute'/'combined'/'data' constructs are the only + // construct that can do anything with this yet, so skip/treat as + // unimplemented in this case. if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCDataDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); // ActOnVar ensured that everything is a valid variable reference, but we diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index c93b22e92f62..9bd91f2768ea 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -101,4 +101,10 @@ void foo() { // CHECK: #pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) #pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2]) + + float *arrayPtr[5]; + +// CHECK: #pragma acc data default(none) deviceptr(iPtr, arrayPtr[0]) +#pragma acc data default(none) deviceptr(iPtr, arrayPtr[0]) + ; } diff --git a/clang/test/SemaOpenACC/data-construct-deviceptr-ast.cpp b/clang/test/SemaOpenACC/data-construct-deviceptr-ast.cpp new file mode 100644 index 000000000000..a4ac289ab482 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-deviceptr-ast.cpp @@ -0,0 +1,66 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; + +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data default(present) deviceptr(PointerParam) + for(int i = 0; i < 5; ++i); + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(present) + // CHECK-NEXT: deviceptr clause + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt +} + +template +void TemplUses(T *t) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T *)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T *' + // CHECK-NEXT: CompoundStmt + +#pragma acc data default(present) deviceptr(t) + for(int i = 0; i < 5; ++i); + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(present) + // CHECK-NEXT: deviceptr clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}} 't' 'T *' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt + + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(present) + // CHECK-NEXT: deviceptr clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 't' 'int *' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt + +} + +void Inst() { + int i; + TemplUses(&i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c b/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c new file mode 100644 index 000000000000..6f2331196ced --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c @@ -0,0 +1,70 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +struct S { + int IntMem; + int *PtrMem; +}; + +void uses() { + int LocalInt; + int *LocalPtr; + int Array[5]; + int *PtrArray[5]; + struct S s; + + // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} +#pragma acc data default(none) deviceptr(LocalInt) + for (int i = 0; i < 5; ++i); + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data default(none) deviceptr(&LocalInt) + for (int i = 0; i < 5; ++i); + + + // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int[5]'}} +#pragma acc kernels loop deviceptr(Array) + for (int i = 0; i < 5; ++i); + + // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} +#pragma acc data default(none) deviceptr(Array[0]) + for (int i = 0; i < 5; ++i); + + // expected-error@+2{{OpenACC sub-array is not allowed here}} + // expected-note@+1{{expected variable of pointer type}} +#pragma acc data default(none) deviceptr(Array[0:1]) + for (int i = 0; i < 5; ++i); + + // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int *[5]'}} +#pragma acc data default(none) deviceptr(PtrArray) + for (int i = 0; i < 5; ++i); + +#pragma acc data default(none) deviceptr(PtrArray[0]) + for (int i = 0; i < 5; ++i); + + // expected-error@+2{{OpenACC sub-array is not allowed here}} + // expected-note@+1{{expected variable of pointer type}} +#pragma acc data default(none) deviceptr(PtrArray[0:1]) + for (int i = 0; i < 5; ++i); + + // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'struct S'}} +#pragma acc data default(none) deviceptr(s) + for (int i = 0; i < 5; ++i); + + // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} +#pragma acc data default(none) deviceptr(s.IntMem) + for (int i = 0; i < 5; ++i); + +#pragma acc data default(none) deviceptr(s.PtrMem) + for (int i = 0; i < 5; ++i); + + // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'enter data' directive}} +#pragma acc enter data copyin(LocalInt) deviceptr(LocalInt) + for(int i = 5; i < 10;++i); + // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'exit data' directive}} +#pragma acc exit data copyout(LocalInt) deviceptr(LocalInt) + for(int i = 5; i < 10;++i); + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} + // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'host_data' directive}} +#pragma acc host_data use_device(LocalInt) deviceptr(LocalInt) + for(int i = 5; i < 10;++i); +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 79c65d06d005..6a46c6837ff4 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -20,6 +20,7 @@ void HasStmt() { void AtLeastOneOf() { int Var; + int *VarPtr = &Var; // Data #pragma acc data copy(Var) ; @@ -33,11 +34,10 @@ void AtLeastOneOf() { ; #pragma acc data present(Var) ; - // expected-warning@+1{{OpenACC clause 'deviceptr' not yet implemented}} -#pragma acc data deviceptr(Var) +#pragma acc data deviceptr(VarPtr) ; // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} -#pragma acc data attach(Var) +#pragma acc data attach(VarPtr) ; #pragma acc data default(none) ; -- cgit v1.2.3 From ce25bd20dc56cef651170f1ee5820758dee415a2 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 08:43:51 -0800 Subject: [OpenACC] Fixup test to be more consistent --- .../SemaOpenACC/data-construct-deviceptr-clause.c | 28 ++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c b/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c index 6f2331196ced..d7869e965c5b 100644 --- a/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c +++ b/clang/test/SemaOpenACC/data-construct-deviceptr-clause.c @@ -14,57 +14,55 @@ void uses() { // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} #pragma acc data default(none) deviceptr(LocalInt) - for (int i = 0; i < 5; ++i); + ; // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} #pragma acc data default(none) deviceptr(&LocalInt) - for (int i = 0; i < 5; ++i); + ; // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int[5]'}} -#pragma acc kernels loop deviceptr(Array) - for (int i = 0; i < 5; ++i); +#pragma acc data default(none) deviceptr(Array) + ; // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} #pragma acc data default(none) deviceptr(Array[0]) - for (int i = 0; i < 5; ++i); + ; // expected-error@+2{{OpenACC sub-array is not allowed here}} // expected-note@+1{{expected variable of pointer type}} #pragma acc data default(none) deviceptr(Array[0:1]) - for (int i = 0; i < 5; ++i); + ; // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int *[5]'}} #pragma acc data default(none) deviceptr(PtrArray) - for (int i = 0; i < 5; ++i); + ; #pragma acc data default(none) deviceptr(PtrArray[0]) - for (int i = 0; i < 5; ++i); + ; // expected-error@+2{{OpenACC sub-array is not allowed here}} // expected-note@+1{{expected variable of pointer type}} #pragma acc data default(none) deviceptr(PtrArray[0:1]) - for (int i = 0; i < 5; ++i); + ; // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'struct S'}} #pragma acc data default(none) deviceptr(s) - for (int i = 0; i < 5; ++i); + ; // expected-error@+1{{expected pointer in 'deviceptr' clause, type is 'int'}} #pragma acc data default(none) deviceptr(s.IntMem) - for (int i = 0; i < 5; ++i); + ; #pragma acc data default(none) deviceptr(s.PtrMem) - for (int i = 0; i < 5; ++i); + ; // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'enter data' directive}} #pragma acc enter data copyin(LocalInt) deviceptr(LocalInt) - for(int i = 5; i < 10;++i); // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'exit data' directive}} #pragma acc exit data copyout(LocalInt) deviceptr(LocalInt) - for(int i = 5; i < 10;++i); // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} // expected-error@+1{{OpenACC 'deviceptr' clause is not valid on 'host_data' directive}} #pragma acc host_data use_device(LocalInt) deviceptr(LocalInt) - for(int i = 5; i < 10;++i); + ; } -- cgit v1.2.3 From 4a6586140211cc9aed02d9177dba0c01622139f4 Mon Sep 17 00:00:00 2001 From: Chris Apple Date: Fri, 13 Dec 2024 08:50:36 -0800 Subject: [rtsan][llvm] Remove function pass, only support module pass (#119739) Most of the other sanitizers are now only module level passes. This moves all functionality into the module pass, and removes the function pass. --- clang/lib/CodeGen/BackendUtil.cpp | 10 ++------ .../Transforms/Instrumentation/RealtimeSanitizer.h | 13 +---------- llvm/lib/Passes/PassBuilder.cpp | 5 ---- llvm/lib/Passes/PassRegistry.def | 6 +---- .../Instrumentation/RealtimeSanitizer.cpp | 27 +++++++++------------- .../Instrumentation/RealtimeSanitizer/rtsan.ll | 2 +- 6 files changed, 16 insertions(+), 47 deletions(-) diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 8cf44592a174..b3728c478772 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1023,14 +1023,8 @@ void EmitAssemblyHelper::RunOptimizationPipeline( FPM.addPass(BoundsCheckingPass()); }); - if (LangOpts.Sanitize.has(SanitizerKind::Realtime)) { - PB.registerScalarOptimizerLateEPCallback( - [](FunctionPassManager &FPM, OptimizationLevel Level) { - RealtimeSanitizerOptions Opts; - FPM.addPass(RealtimeSanitizerPass(Opts)); - }); - MPM.addPass(ModuleRealtimeSanitizerPass()); - } + if (LangOpts.Sanitize.has(SanitizerKind::Realtime)) + MPM.addPass(RealtimeSanitizerPass()); // Don't add sanitizers if we are here from ThinLTO PostLink. That already // done on PreLink stage. diff --git a/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h index 151e70e87b29..5ee1cb044393 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h +++ b/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h @@ -23,19 +23,8 @@ namespace llvm { -struct RealtimeSanitizerOptions {}; - -class RealtimeSanitizerPass : public PassInfoMixin { -public: - RealtimeSanitizerPass(const RealtimeSanitizerOptions &Options); - PreservedAnalyses run(Function &F, AnalysisManager &AM); - - static bool isRequired() { return true; } -}; - /// Create ctor and init functions. -struct ModuleRealtimeSanitizerPass - : public PassInfoMixin { +struct RealtimeSanitizerPass : public PassInfoMixin { PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); static bool isRequired() { return true; } }; diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 260a34f2e060..6e1cefdb3f4d 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -1281,11 +1281,6 @@ parseRegAllocFastPassOptions(PassBuilder &PB, StringRef Params) { return Opts; } -Expected parseRtSanPassOptions(StringRef Params) { - RealtimeSanitizerOptions Result; - return Result; -} - } // namespace /// Tests whether a pass name starts with a valid prefix for a default pipeline diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index 825f2f7f9a49..b7fc7d2ac7fe 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -138,7 +138,7 @@ MODULE_PASS("rel-lookup-table-converter", RelLookupTableConverterPass()) MODULE_PASS("rewrite-statepoints-for-gc", RewriteStatepointsForGC()) MODULE_PASS("rewrite-symbols", RewriteSymbolPass()) MODULE_PASS("rpo-function-attrs", ReversePostOrderFunctionAttrsPass()) -MODULE_PASS("rtsan-module", ModuleRealtimeSanitizerPass()) +MODULE_PASS("rtsan", RealtimeSanitizerPass()) MODULE_PASS("sample-profile", SampleProfileLoaderPass()) MODULE_PASS("sancov-module", SanitizerCoveragePass()) MODULE_PASS("sanmd-module", SanitizerBinaryMetadataPass()) @@ -620,10 +620,6 @@ FUNCTION_PASS_WITH_PARAMS( return WinEHPreparePass(DemoteCatchSwitchPHIOnly); }, parseWinEHPrepareOptions, "demote-catchswitch-only") -FUNCTION_PASS_WITH_PARAMS( - "rtsan", "RealtimeSanitizerPass", - [](RealtimeSanitizerOptions Opts) { return RealtimeSanitizerPass(Opts); }, - parseRtSanPassOptions, "") #undef FUNCTION_PASS_WITH_PARAMS #ifndef LOOPNEST_PASS diff --git a/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp index 890c79ae9671..5ef6ffb58a7c 100644 --- a/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp @@ -80,27 +80,22 @@ static PreservedAnalyses runSanitizeRealtimeBlocking(Function &Fn) { return rtsanPreservedCFGAnalyses(); } -RealtimeSanitizerPass::RealtimeSanitizerPass( - const RealtimeSanitizerOptions &Options) {} - -PreservedAnalyses RealtimeSanitizerPass::run(Function &Fn, - AnalysisManager &AM) { - if (Fn.hasFnAttribute(Attribute::SanitizeRealtime)) - return runSanitizeRealtime(Fn); - - if (Fn.hasFnAttribute(Attribute::SanitizeRealtimeBlocking)) - return runSanitizeRealtimeBlocking(Fn); - - return PreservedAnalyses::all(); -} - -PreservedAnalyses ModuleRealtimeSanitizerPass::run(Module &M, - ModuleAnalysisManager &MAM) { +PreservedAnalyses RealtimeSanitizerPass::run(Module &M, + ModuleAnalysisManager &MAM) { getOrCreateSanitizerCtorAndInitFunctions( M, kRtsanModuleCtorName, kRtsanInitName, /*InitArgTypes=*/{}, /*InitArgs=*/{}, // This callback is invoked when the functions are created the first // time. Hook them into the global ctors list in that case: [&](Function *Ctor, FunctionCallee) { appendToGlobalCtors(M, Ctor, 0); }); + + for (Function &F : M) { + if (F.hasFnAttribute(Attribute::SanitizeRealtime)) + runSanitizeRealtime(F); + + if (F.hasFnAttribute(Attribute::SanitizeRealtimeBlocking)) + runSanitizeRealtimeBlocking(F); + } + return PreservedAnalyses::none(); } diff --git a/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll b/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll index c245a85a9a48..18d9b4cae95d 100644 --- a/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll +++ b/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll @@ -1,4 +1,4 @@ -; RUN: opt < %s -passes='function(rtsan),module(rtsan-module)' -S | FileCheck %s +; RUN: opt < %s -passes='rtsan' -S | FileCheck %s define void @violation() #0 { %1 = alloca ptr, align 8 -- cgit v1.2.3 From fb02c33605bd988e9c6bb3a18cd7f0c3b1f20d5c Mon Sep 17 00:00:00 2001 From: Dhruv Srivastava Date: Fri, 13 Dec 2024 22:24:54 +0530 Subject: [lldb][AIX] XCOFF clang-format and other minor changes (#119892) Added some clang-format and other minor changes, Ref: https://github.com/llvm/llvm-project/pull/116338#discussion_r1884069848 Review Request: @DavidSpickett --- .../source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp | 17 +++++++---------- lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h | 6 ++---- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp b/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp index 3be900f9a4bc..564e92f3934b 100644 --- a/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp +++ b/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.cpp @@ -8,12 +8,6 @@ //===----------------------------------------------------------------------===// #include "ObjectFileXCOFF.h" - -#include -#include -#include -#include - #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" #include "lldb/Core/PluginManager.h" @@ -35,6 +29,10 @@ #include "llvm/BinaryFormat/XCOFF.h" #include "llvm/Object/XCOFFObjectFile.h" #include "llvm/Support/MemoryBuffer.h" +#include +#include +#include +#include using namespace llvm; using namespace lldb; @@ -110,10 +108,9 @@ size_t ObjectFileXCOFF::GetModuleSpecifications( static uint32_t XCOFFHeaderSizeFromMagic(uint32_t magic) { switch (magic) { - /* TODO: 32bit not supported yet - case XCOFF::XCOFF32: - return sizeof(struct llvm::object::XCOFFFileHeader32); - */ + // TODO: 32bit not supported yet + // case XCOFF::XCOFF32: + // return sizeof(struct llvm::object::XCOFFFileHeader32); case XCOFF::XCOFF64: return sizeof(struct llvm::object::XCOFFFileHeader64); diff --git a/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h b/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h index 3a33b97b9e8d..c0ce885f7042 100644 --- a/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h +++ b/lldb/source/Plugins/ObjectFile/XCOFF/ObjectFileXCOFF.h @@ -10,16 +10,14 @@ #ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H #define LLDB_SOURCE_PLUGINS_OBJECTFILE_XCOFF_OBJECTFILEXCOFF_H -#include - -#include - #include "lldb/Symbol/ObjectFile.h" #include "lldb/Utility/ArchSpec.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/UUID.h" #include "lldb/lldb-private.h" #include "llvm/Object/XCOFFObjectFile.h" +#include +#include /// \class ObjectFileXCOFF /// Generic XCOFF object file reader. -- cgit v1.2.3 From c9070cce09e1aef1c4bf1cb8c0000294b533dcd7 Mon Sep 17 00:00:00 2001 From: Sergei Barannikov Date: Fri, 13 Dec 2024 19:55:11 +0300 Subject: [TableGen] Allow empty terminator in SequenceToOffsetTable (#119751) Some clients do not want to emit a terminator after each sub-sequence (they have other means of determining the length of sub-sequences). This moves `Term` argument from `emit` method to the constructor and makes it optional. It couldn't be made optional while still on the `emit` method because if the terminator wasn't specified, it has to be taken into account in `layout` method as well. The fact that `layout` method was called is now recorded in a dedicated member variable, `IsLaidOut`. `Entries != 0` can no longer be used to reliably check if `layout` method was called because it may be zero for a different reason: the terminator wasn't specified and all added sequences (if any) were empty. This reduces the size of `*LaneMaskLists` and `*SubRegIdxLists` a bit and resolves the removed TODO. --- llvm/test/TableGen/MixedCasedMnemonic.td | 5 +-- llvm/utils/TableGen/Basic/SequenceToOffsetTable.h | 54 ++++++++++++++++------- llvm/utils/TableGen/DFAEmitter.cpp | 9 ++-- llvm/utils/TableGen/RegisterInfoEmitter.cpp | 20 ++++----- 4 files changed, 52 insertions(+), 36 deletions(-) diff --git a/llvm/test/TableGen/MixedCasedMnemonic.td b/llvm/test/TableGen/MixedCasedMnemonic.td index 3dc44ab6052c..cb224ac59c6d 100644 --- a/llvm/test/TableGen/MixedCasedMnemonic.td +++ b/llvm/test/TableGen/MixedCasedMnemonic.td @@ -53,8 +53,8 @@ def :MnemonicAlias<"InstB", "BInst">; // Check that the writer preserves the case of the mnemonics. // WRITER: static const char AsmStrs[] = { -// WRITER: "BInst\0" -// WRITER-NEXT: "aInst\0" +// WRITER: "BInst\000" +// WRITER-NEXT: "aInst\000" // WRITER-NEXT: }; // ALIAS: static void applyMnemonicAliases(StringRef &Mnemonic, const FeatureBitset &Features, unsigned VariantID) { @@ -73,4 +73,3 @@ def :MnemonicAlias<"InstB", "BInst">; // ALIAS-NEXT case 'b': // 1 string to match. // ALIAS-NEXT Mnemonic = "binst"; // "instb" // ALIAS-NEXT return; - diff --git a/llvm/utils/TableGen/Basic/SequenceToOffsetTable.h b/llvm/utils/TableGen/Basic/SequenceToOffsetTable.h index 497e74afc18e..c918365b2289 100644 --- a/llvm/utils/TableGen/Basic/SequenceToOffsetTable.h +++ b/llvm/utils/TableGen/Basic/SequenceToOffsetTable.h @@ -6,9 +6,8 @@ // //===----------------------------------------------------------------------===// // -// SequenceToOffsetTable can be used to emit a number of null-terminated -// sequences as one big array. Use the same memory when a sequence is a suffix -// of another. +// SequenceToOffsetTable can be used to emit a number of sequences as one big +// array. Uses the same memory when a sequence is a suffix of another. // //===----------------------------------------------------------------------===// @@ -65,8 +64,14 @@ class SequenceToOffsetTable { // Sequences added so far, with suffixes removed. SeqMap Seqs; + // Terminator element to be appended to each added sequence. + std::optional Terminator; + + // True if `layout` method was called. + bool IsLaidOut = false; + // Entries in the final table, or 0 before layout was called. - unsigned Entries; + unsigned Entries = 0; // isSuffix - Returns true if A is a suffix of B. static bool isSuffix(const SeqT &A, const SeqT &B) { @@ -74,12 +79,13 @@ class SequenceToOffsetTable { } public: - SequenceToOffsetTable() : Entries(0) {} + explicit SequenceToOffsetTable(std::optional Terminator = ElemT()) + : Terminator(Terminator) {} /// add - Add a sequence to the table. /// This must be called before layout(). void add(const SeqT &Seq) { - assert(Entries == 0 && "Cannot call add() after layout()"); + assert(!IsLaidOut && "Cannot call add() after layout()"); typename SeqMap::iterator I = Seqs.lower_bound(Seq); // If SeqMap contains a sequence that has Seq as a suffix, I will be @@ -97,25 +103,27 @@ public: bool empty() const { return Seqs.empty(); } unsigned size() const { - assert((empty() || Entries) && "Call layout() before size()"); + assert(IsLaidOut && "Call layout() before size()"); return Entries; } /// layout - Computes the final table layout. void layout() { - assert(Entries == 0 && "Can only call layout() once"); + assert(!IsLaidOut && "Can only call layout() once"); + IsLaidOut = true; + // Lay out the table in Seqs iteration order. for (typename SeqMap::iterator I = Seqs.begin(), E = Seqs.end(); I != E; ++I) { I->second = Entries; // Include space for a terminator. - Entries += I->first.size() + 1; + Entries += I->first.size() + Terminator.has_value(); } } /// get - Returns the offset of Seq in the final table. unsigned get(const SeqT &Seq) const { - assert(Entries && "Call layout() before get()"); + assert(IsLaidOut && "Call layout() before get()"); typename SeqMap::const_iterator I = Seqs.lower_bound(Seq); assert(I != Seqs.end() && isSuffix(Seq, I->first) && "get() called with sequence that wasn't added first"); @@ -127,10 +135,10 @@ public: /// `\0`. Falls back to emitting a comma-separated integer list if /// `EmitLongStrLiterals` is false void emitStringLiteralDef(raw_ostream &OS, const Twine &Decl) const { - assert(Entries && "Call layout() before emitStringLiteralDef()"); + assert(IsLaidOut && "Call layout() before emitStringLiteralDef()"); if (!EmitLongStrLiterals) { OS << Decl << " = {\n"; - emit(OS, printChar, "0"); + emit(OS, printChar); OS << " 0\n};\n\n"; return; } @@ -143,7 +151,9 @@ public: for (const auto &[Seq, Offset] : Seqs) { OS << " /* " << Offset << " */ \""; OS.write_escaped(Seq); - OS << "\\0\"\n"; + if (Terminator) + OS.write_escaped(StringRef(&*Terminator, 1)); + OS << "\"\n"; } OS << "};\n" << "#ifdef __GNUC__\n" @@ -153,16 +163,26 @@ public: /// emit - Print out the table as the body of an array initializer. /// Use the Print function to print elements. - void emit(raw_ostream &OS, void (*Print)(raw_ostream &, ElemT), - const char *Term = "0") const { - assert((empty() || Entries) && "Call layout() before emit()"); + void emit(raw_ostream &OS, void (*Print)(raw_ostream &, ElemT)) const { + assert(IsLaidOut && "Call layout() before emit()"); for (const auto &[Seq, Offset] : Seqs) { OS << " /* " << Offset << " */ "; for (const ElemT &Element : Seq) { Print(OS, Element); OS << ", "; } - OS << Term << ",\n"; + if (Terminator) { + Print(OS, *Terminator); + OS << ','; + } + OS << '\n'; + } + + // Print a dummy element if the array would be empty otherwise. + if (!Entries) { + OS << " /* dummy */ "; + Print(OS, ElemT()); + OS << '\n'; } } }; diff --git a/llvm/utils/TableGen/DFAEmitter.cpp b/llvm/utils/TableGen/DFAEmitter.cpp index 264cccf6ac0c..c150620b7417 100644 --- a/llvm/utils/TableGen/DFAEmitter.cpp +++ b/llvm/utils/TableGen/DFAEmitter.cpp @@ -124,12 +124,9 @@ void DfaEmitter::emit(StringRef Name, raw_ostream &OS) { Table.layout(); OS << "const std::array " << Name << "TransitionInfo = {{\n"; - Table.emit( - OS, - [](raw_ostream &OS, std::pair P) { - OS << "{" << P.first << ", " << P.second << "}"; - }, - "{0ULL, 0ULL}"); + Table.emit(OS, [](raw_ostream &OS, std::pair P) { + OS << "{" << P.first << ", " << P.second << "}"; + }); OS << "}};\n\n"; diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp index bfcd52da1c39..0c1f5d205ca0 100644 --- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp +++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp @@ -288,7 +288,7 @@ void RegisterInfoEmitter::EmitRegUnitPressure(raw_ostream &OS, << " return PressureLimitTable[Idx];\n" << "}\n\n"; - SequenceToOffsetTable> PSetsSeqs; + SequenceToOffsetTable> PSetsSeqs(/*Terminator=*/-1); // This table may be larger than NumRCs if some register units needed a list // of unit sets that did not correspond to a register class. @@ -309,7 +309,7 @@ void RegisterInfoEmitter::EmitRegUnitPressure(raw_ostream &OS, OS << "/// Table of pressure sets per register class or unit.\n" << "static const int RCSetsTable[] = {\n"; - PSetsSeqs.emit(OS, printInt, "-1"); + PSetsSeqs.emit(OS, printInt); OS << "};\n\n"; OS << "/// Get the dimensions of register pressure impacted by this " @@ -610,7 +610,7 @@ static void printSimpleValueType(raw_ostream &OS, MVT::SimpleValueType VT) { } static void printSubRegIndex(raw_ostream &OS, const CodeGenSubRegIndex *Idx) { - OS << Idx->EnumValue; + OS << (Idx ? Idx->EnumValue : 0); } // Differentially encoded register and regunit lists allow for better @@ -875,13 +875,14 @@ void RegisterInfoEmitter::runMCDesc(raw_ostream &OS) { SmallVector RegUnitLists(Regs.size()); // List of lane masks accompanying register unit sequences. - SequenceToOffsetTable LaneMaskSeqs; + SequenceToOffsetTable LaneMaskSeqs(/*Terminator=*/std::nullopt); SmallVector RegUnitLaneMasks(Regs.size()); // Keep track of sub-register names as well. These are not differentially // encoded. typedef SmallVector SubRegIdxVec; - SequenceToOffsetTable>> SubRegIdxSeqs; + SequenceToOffsetTable>> SubRegIdxSeqs( + /*Terminator=*/std::nullopt); SmallVector SubRegIdxLists(Regs.size()); SequenceToOffsetTable RegStrings; @@ -936,9 +937,7 @@ void RegisterInfoEmitter::runMCDesc(raw_ostream &OS) { // Emit the shared table of regunit lane mask sequences. OS << "extern const LaneBitmask " << TargetName << "LaneMaskLists[] = {\n"; - // TODO: Omit the terminator since it is never used. The length of this list - // is known implicitly from the corresponding reg unit list. - LaneMaskSeqs.emit(OS, printMask, "LaneBitmask::getAll()"); + LaneMaskSeqs.emit(OS, printMask); OS << "};\n\n"; // Emit the table of sub-register indexes. @@ -1209,7 +1208,8 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS) { unsigned NumModes = CGH.getNumModeIds(); // Build a shared array of value types. - SequenceToOffsetTable> VTSeqs; + SequenceToOffsetTable> VTSeqs( + /*Terminator=*/MVT::Other); for (unsigned M = 0; M < NumModes; ++M) { for (const auto &RC : RegisterClasses) { std::vector S; @@ -1221,7 +1221,7 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS) { } VTSeqs.layout(); OS << "\nstatic const MVT::SimpleValueType VTLists[] = {\n"; - VTSeqs.emit(OS, printSimpleValueType, "MVT::Other"); + VTSeqs.emit(OS, printSimpleValueType); OS << "};\n"; // Emit SubRegIndex names, skipping 0. -- cgit v1.2.3 From c57a8f5b3fa7a7524346595cdc1ddd5eec4a41ae Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Fri, 13 Dec 2024 10:56:35 -0600 Subject: [flang][OpenMP] Remove redundant `Fortran::` from namespaces, NFC Apply clang-format after the changes. --- flang/lib/Semantics/check-omp-structure.cpp | 105 +++++++++++++--------------- 1 file changed, 49 insertions(+), 56 deletions(-) diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index 414753305a6e..95b962f5daf5 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -554,18 +554,16 @@ void OmpStructureChecker::CheckHintClause( D *leftOmpClauseList, D *rightOmpClauseList) { auto checkForValidHintClause = [&](const D *clauseList) { for (const auto &clause : clauseList->v) { - const Fortran::parser::OmpClause *ompClause = nullptr; - if constexpr (std::is_same_v) { - ompClause = std::get_if(&clause.u); + const parser::OmpClause *ompClause = nullptr; + if constexpr (std::is_same_v) { + ompClause = std::get_if(&clause.u); if (!ompClause) continue; - } else if constexpr (std::is_same_v) { + } else if constexpr (std::is_same_v) { ompClause = &clause; } - if (const Fortran::parser::OmpClause::Hint *hintClause{ - std::get_if(&ompClause->u)}) { + if (const parser::OmpClause::Hint *hintClause{ + std::get_if(&ompClause->u)}) { std::optional hintValue = GetIntValue(hintClause->v); if (hintValue && *hintValue >= 0) { /*`omp_sync_hint_nonspeculative` and `omp_lock_hint_speculative`*/ @@ -793,7 +791,7 @@ void OmpStructureChecker::CheckSIMDNest(const parser::OpenMPConstruct &c) { // TODO: Check for declare simd regions. bool eligibleSIMD{false}; common::visit( - Fortran::common::visitors{ + common::visitors{ // Allow `!$OMP ORDERED SIMD` [&](const parser::OpenMPBlockConstruct &c) { const auto &beginBlockDir{ @@ -2121,7 +2119,7 @@ void OmpStructureChecker::CheckCancellationNest( eligibleCancellation = true; } break; - case Fortran::parser::OmpCancelType::Type::Do: + case parser::OmpCancelType::Type::Do: if (llvm::omp::nestedCancelDoAllowedSet.test( GetContextParent().directive)) { eligibleCancellation = true; @@ -2162,7 +2160,7 @@ void OmpStructureChecker::CheckCancellationNest( parser::ToUpperCaseLetters( parser::OmpCancelType::EnumToString(type))); break; - case Fortran::parser::OmpCancelType::Type::Do: + case parser::OmpCancelType::Type::Do: context_.Say(source, "%s %s directive is not closely nested inside " "the construct that matches the DO clause type"_err_en_US, @@ -2228,9 +2226,9 @@ inline void OmpStructureChecker::ErrIfAllocatableVariable( const auto &designator = std::get>(var.u); const auto *dataRef = - std::get_if(&designator.value().u); - const Fortran::parser::Name *name = - dataRef ? std::get_if(&dataRef->u) : nullptr; + std::get_if(&designator.value().u); + const parser::Name *name = + dataRef ? std::get_if(&dataRef->u) : nullptr; if (name) context_.Say(name->source, "%s must not have ALLOCATABLE " @@ -2250,10 +2248,8 @@ inline void OmpStructureChecker::ErrIfLHSAndRHSSymbolsMatch( const Symbol &varSymbol = vSyms.front(); for (const Symbol &symbol : evaluate::GetSymbolVector(*e)) { if (varSymbol == symbol) { - const Fortran::common::Indirection - *designator = std::get_if< - Fortran::common::Indirection>( - &expr.u); + const common::Indirection *designator = + std::get_if>(&expr.u); if (designator) { auto *z{var.typedExpr.get()}; auto *c{expr.typedExpr.get()}; @@ -2334,10 +2330,9 @@ void OmpStructureChecker::CheckAtomicCaptureStmt( common::visitors{ [&](const common::Indirection &designator) { const auto *dataRef = - std::get_if(&designator.value().u); - const auto *name = dataRef - ? std::get_if(&dataRef->u) - : nullptr; + std::get_if(&designator.value().u); + const auto *name = + dataRef ? std::get_if(&dataRef->u) : nullptr; if (name && IsAllocatable(*name->symbol)) context_.Say(name->source, "%s must not have ALLOCATABLE " @@ -2470,23 +2465,21 @@ void OmpStructureChecker::CheckAtomicCompareConstruct( // TODO: Allow cond-update-stmt once compare clause is supported. void OmpStructureChecker::CheckAtomicCaptureConstruct( const parser::OmpAtomicCapture &atomicCaptureConstruct) { - const Fortran::parser::AssignmentStmt &stmt1 = - std::get( - atomicCaptureConstruct.t) + const parser::AssignmentStmt &stmt1 = + std::get(atomicCaptureConstruct.t) .v.statement; - const auto &stmt1Var{std::get(stmt1.t)}; - const auto &stmt1Expr{std::get(stmt1.t)}; + const auto &stmt1Var{std::get(stmt1.t)}; + const auto &stmt1Expr{std::get(stmt1.t)}; - const Fortran::parser::AssignmentStmt &stmt2 = - std::get( - atomicCaptureConstruct.t) + const parser::AssignmentStmt &stmt2 = + std::get(atomicCaptureConstruct.t) .v.statement; - const auto &stmt2Var{std::get(stmt2.t)}; - const auto &stmt2Expr{std::get(stmt2.t)}; + const auto &stmt2Var{std::get(stmt2.t)}; + const auto &stmt2Expr{std::get(stmt2.t)}; - if (Fortran::semantics::checkForSingleVariableOnRHS(stmt1)) { + if (semantics::checkForSingleVariableOnRHS(stmt1)) { CheckAtomicCaptureStmt(stmt1); - if (Fortran::semantics::checkForSymbolMatch(stmt2)) { + if (semantics::checkForSymbolMatch(stmt2)) { // ATOMIC CAPTURE construct is of the form [capture-stmt, update-stmt] CheckAtomicUpdateStmt(stmt2); } else { @@ -2500,8 +2493,8 @@ void OmpStructureChecker::CheckAtomicCaptureConstruct( "Captured variable/array element/derived-type component %s expected to be assigned in the second statement of ATOMIC CAPTURE construct"_err_en_US, stmt1Expr.source); } - } else if (Fortran::semantics::checkForSymbolMatch(stmt1) && - Fortran::semantics::checkForSingleVariableOnRHS(stmt2)) { + } else if (semantics::checkForSymbolMatch(stmt1) && + semantics::checkForSingleVariableOnRHS(stmt2)) { // ATOMIC CAPTURE construct is of the form [update-stmt, capture-stmt] CheckAtomicUpdateStmt(stmt1); CheckAtomicCaptureStmt(stmt2); @@ -2524,28 +2517,28 @@ void OmpStructureChecker::CheckAtomicMemoryOrderClause( const parser::OmpAtomicClauseList *rightHandClauseList) { int numMemoryOrderClause{0}; int numFailClause{0}; - auto checkForValidMemoryOrderClause = - [&](const parser::OmpAtomicClauseList *clauseList) { - for (const auto &clause : clauseList->v) { - if (std::get_if(&clause.u)) { - numFailClause++; - if (numFailClause > 1) { - context_.Say(clause.source, - "More than one FAIL clause not allowed on OpenMP ATOMIC construct"_err_en_US); - return; - } - } else { - if (std::get_if(&clause.u)) { - numMemoryOrderClause++; - if (numMemoryOrderClause > 1) { - context_.Say(clause.source, - "More than one memory order clause not allowed on OpenMP ATOMIC construct"_err_en_US); - return; - } - } + auto checkForValidMemoryOrderClause = [&](const parser::OmpAtomicClauseList + *clauseList) { + for (const auto &clause : clauseList->v) { + if (std::get_if(&clause.u)) { + numFailClause++; + if (numFailClause > 1) { + context_.Say(clause.source, + "More than one FAIL clause not allowed on OpenMP ATOMIC construct"_err_en_US); + return; + } + } else { + if (std::get_if(&clause.u)) { + numMemoryOrderClause++; + if (numMemoryOrderClause > 1) { + context_.Say(clause.source, + "More than one memory order clause not allowed on OpenMP ATOMIC construct"_err_en_US); + return; } } - }; + } + } + }; if (leftHandClauseList) { checkForValidMemoryOrderClause(leftHandClauseList); } -- cgit v1.2.3 From 7db20a026b71797975f277a406b604def1da6219 Mon Sep 17 00:00:00 2001 From: Brox Chen Date: Fri, 13 Dec 2024 12:02:30 -0500 Subject: [AMDGPU][True16][MC] update vop1 mc test with update script (#119778) This is a NFC change. Update gfx11/gfx12 vop1 test file with the latest update_mc_test_script.py. Changing the runline of gfx12_asm_vop1.s since llvm.cfg cannot be read by the update script. This is also preparing for the up-coming true16 change. --- llvm/test/MC/AMDGPU/gfx11_asm_vop1.s | 2437 +++++++++---------- llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp16.s | 1877 +++++++-------- llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp8.s | 435 ++-- .../MC/AMDGPU/gfx11_asm_vop3_dpp16_from_vop1.s | 1965 ++++++++-------- .../test/MC/AMDGPU/gfx11_asm_vop3_dpp8_from_vop1.s | 567 ++--- llvm/test/MC/AMDGPU/gfx11_asm_vop3_from_vop1.s | 2429 +++++++++---------- llvm/test/MC/AMDGPU/gfx12_asm_vop1.s | 5 +- llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp16.s | 1921 +++++++-------- llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp8.s | 447 ++-- llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1.s | 2485 ++++++++++---------- .../MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp16.s | 1847 +++++++-------- .../test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp8.s | 515 ++-- 12 files changed, 8471 insertions(+), 8459 deletions(-) diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s index 379ae3de565a..d998f4388f1f 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s @@ -1,3656 +1,3657 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize32 -show-encoding %s | FileCheck --check-prefix=GFX11 %s // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize64 -show-encoding %s | FileCheck --check-prefix=GFX11 %s v_bfrev_b32_e32 v5, v1 -// GFX11: encoding: [0x01,0x71,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, v1 ; encoding: [0x01,0x71,0x0a,0x7e] v_bfrev_b32 v5, v255 -// GFX11: encoding: [0xff,0x71,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, v255 ; encoding: [0xff,0x71,0x0a,0x7e] v_bfrev_b32 v5, s1 -// GFX11: encoding: [0x01,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, s1 ; encoding: [0x01,0x70,0x0a,0x7e] v_bfrev_b32 v5, s105 -// GFX11: encoding: [0x69,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, s105 ; encoding: [0x69,0x70,0x0a,0x7e] v_bfrev_b32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, vcc_lo ; encoding: [0x6a,0x70,0x0a,0x7e] v_bfrev_b32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, vcc_hi ; encoding: [0x6b,0x70,0x0a,0x7e] v_bfrev_b32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, ttmp15 ; encoding: [0x7b,0x70,0x0a,0x7e] v_bfrev_b32 v5, m0 -// GFX11: encoding: [0x7d,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, m0 ; encoding: [0x7d,0x70,0x0a,0x7e] v_bfrev_b32 v5, exec_lo -// GFX11: encoding: [0x7e,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, exec_lo ; encoding: [0x7e,0x70,0x0a,0x7e] v_bfrev_b32 v5, exec_hi -// GFX11: encoding: [0x7f,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, exec_hi ; encoding: [0x7f,0x70,0x0a,0x7e] v_bfrev_b32 v5, null -// GFX11: encoding: [0x7c,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, null ; encoding: [0x7c,0x70,0x0a,0x7e] v_bfrev_b32 v5, -1 -// GFX11: encoding: [0xc1,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, -1 ; encoding: [0xc1,0x70,0x0a,0x7e] v_bfrev_b32 v5, 0.5 -// GFX11: encoding: [0xf0,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, 0.5 ; encoding: [0xf0,0x70,0x0a,0x7e] v_bfrev_b32 v5, src_scc -// GFX11: encoding: [0xfd,0x70,0x0a,0x7e] +// GFX11: v_bfrev_b32_e32 v5, src_scc ; encoding: [0xfd,0x70,0x0a,0x7e] v_bfrev_b32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x70,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_bfrev_b32_e32 v255, 0xaf123456 ; encoding: [0xff,0x70,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_ceil_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xb9,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, v1.l ; encoding: [0x01,0xb9,0x0a,0x7e] v_ceil_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xb9,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xb9,0x0a,0x7e] v_ceil_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xb9,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, v1.h ; encoding: [0x81,0xb9,0x0a,0x7e] v_ceil_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xb9,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, v127.h ; encoding: [0xff,0xb9,0x0a,0x7e] v_ceil_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, s1 ; encoding: [0x01,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, s105 ; encoding: [0x69,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, m0 ; encoding: [0x7d,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, null -// GFX11: encoding: [0x7c,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, null ; encoding: [0x7c,0xb8,0x0a,0x7e] v_ceil_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xb8,0x0a,0x7e] +// GFX11: v_ceil_f16_e32 v5.l, -1 ; encoding: [0xc1,0xb8,0x0a,0x7e] v_ceil_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xb8,0xfe,0x7e] +// GFX11: v_ceil_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xb8,0xfe,0x7e] v_ceil_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xb8,0x0a,0x7f] +// GFX11: v_ceil_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xb8,0x0a,0x7f] v_ceil_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xb8,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_ceil_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xb8,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_ceil_f32 v5, v1 -// GFX11: encoding: [0x01,0x45,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, v1 ; encoding: [0x01,0x45,0x0a,0x7e] v_ceil_f32 v5, v255 -// GFX11: encoding: [0xff,0x45,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, v255 ; encoding: [0xff,0x45,0x0a,0x7e] v_ceil_f32 v5, s1 -// GFX11: encoding: [0x01,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, s1 ; encoding: [0x01,0x44,0x0a,0x7e] v_ceil_f32 v5, s105 -// GFX11: encoding: [0x69,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, s105 ; encoding: [0x69,0x44,0x0a,0x7e] v_ceil_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x44,0x0a,0x7e] v_ceil_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x44,0x0a,0x7e] v_ceil_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x44,0x0a,0x7e] v_ceil_f32 v5, m0 -// GFX11: encoding: [0x7d,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, m0 ; encoding: [0x7d,0x44,0x0a,0x7e] v_ceil_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, exec_lo ; encoding: [0x7e,0x44,0x0a,0x7e] v_ceil_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, exec_hi ; encoding: [0x7f,0x44,0x0a,0x7e] v_ceil_f32 v5, null -// GFX11: encoding: [0x7c,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, null ; encoding: [0x7c,0x44,0x0a,0x7e] v_ceil_f32 v5, -1 -// GFX11: encoding: [0xc1,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, -1 ; encoding: [0xc1,0x44,0x0a,0x7e] v_ceil_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, 0.5 ; encoding: [0xf0,0x44,0x0a,0x7e] v_ceil_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x44,0x0a,0x7e] +// GFX11: v_ceil_f32_e32 v5, src_scc ; encoding: [0xfd,0x44,0x0a,0x7e] v_ceil_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x44,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_ceil_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x44,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_ceil_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x31,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x31,0x0a,0x7e] v_ceil_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x31,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x31,0x0a,0x7e] v_ceil_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], exec ; encoding: [0x7e,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], null ; encoding: [0x7c,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x30,0x0a,0x7e] v_ceil_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x30,0x0a,0x7e] +// GFX11: v_ceil_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x30,0x0a,0x7e] v_ceil_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x30,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_ceil_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x30,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_cls_i32 v5, v1 -// GFX11: encoding: [0x01,0x77,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, v1 ; encoding: [0x01,0x77,0x0a,0x7e] v_cls_i32 v5, v255 -// GFX11: encoding: [0xff,0x77,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, v255 ; encoding: [0xff,0x77,0x0a,0x7e] v_cls_i32 v5, s1 -// GFX11: encoding: [0x01,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, s1 ; encoding: [0x01,0x76,0x0a,0x7e] v_cls_i32 v5, s105 -// GFX11: encoding: [0x69,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, s105 ; encoding: [0x69,0x76,0x0a,0x7e] v_cls_i32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, vcc_lo ; encoding: [0x6a,0x76,0x0a,0x7e] v_cls_i32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, vcc_hi ; encoding: [0x6b,0x76,0x0a,0x7e] v_cls_i32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, ttmp15 ; encoding: [0x7b,0x76,0x0a,0x7e] v_cls_i32 v5, m0 -// GFX11: encoding: [0x7d,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, m0 ; encoding: [0x7d,0x76,0x0a,0x7e] v_cls_i32 v5, exec_lo -// GFX11: encoding: [0x7e,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, exec_lo ; encoding: [0x7e,0x76,0x0a,0x7e] v_cls_i32 v5, exec_hi -// GFX11: encoding: [0x7f,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, exec_hi ; encoding: [0x7f,0x76,0x0a,0x7e] v_cls_i32 v5, null -// GFX11: encoding: [0x7c,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, null ; encoding: [0x7c,0x76,0x0a,0x7e] v_cls_i32 v5, -1 -// GFX11: encoding: [0xc1,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, -1 ; encoding: [0xc1,0x76,0x0a,0x7e] v_cls_i32 v5, 0.5 -// GFX11: encoding: [0xf0,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, 0.5 ; encoding: [0xf0,0x76,0x0a,0x7e] v_cls_i32 v5, src_scc -// GFX11: encoding: [0xfd,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, src_scc ; encoding: [0xfd,0x76,0x0a,0x7e] v_cls_i32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x76,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cls_i32_e32 v255, 0xaf123456 ; encoding: [0xff,0x76,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_clz_i32_u32 v5, v1 -// GFX11: encoding: [0x01,0x73,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, v1 ; encoding: [0x01,0x73,0x0a,0x7e] v_clz_i32_u32 v5, v255 -// GFX11: encoding: [0xff,0x73,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, v255 ; encoding: [0xff,0x73,0x0a,0x7e] v_clz_i32_u32 v5, s1 -// GFX11: encoding: [0x01,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, s1 ; encoding: [0x01,0x72,0x0a,0x7e] v_clz_i32_u32 v5, s105 -// GFX11: encoding: [0x69,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, s105 ; encoding: [0x69,0x72,0x0a,0x7e] v_clz_i32_u32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, vcc_lo ; encoding: [0x6a,0x72,0x0a,0x7e] v_clz_i32_u32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, vcc_hi ; encoding: [0x6b,0x72,0x0a,0x7e] v_clz_i32_u32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, ttmp15 ; encoding: [0x7b,0x72,0x0a,0x7e] v_clz_i32_u32 v5, m0 -// GFX11: encoding: [0x7d,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, m0 ; encoding: [0x7d,0x72,0x0a,0x7e] v_clz_i32_u32 v5, exec_lo -// GFX11: encoding: [0x7e,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, exec_lo ; encoding: [0x7e,0x72,0x0a,0x7e] v_clz_i32_u32 v5, exec_hi -// GFX11: encoding: [0x7f,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, exec_hi ; encoding: [0x7f,0x72,0x0a,0x7e] v_clz_i32_u32 v5, null -// GFX11: encoding: [0x7c,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, null ; encoding: [0x7c,0x72,0x0a,0x7e] v_clz_i32_u32 v5, -1 -// GFX11: encoding: [0xc1,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, -1 ; encoding: [0xc1,0x72,0x0a,0x7e] v_clz_i32_u32 v5, 0.5 -// GFX11: encoding: [0xf0,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, 0.5 ; encoding: [0xf0,0x72,0x0a,0x7e] v_clz_i32_u32 v5, src_scc -// GFX11: encoding: [0xfd,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, src_scc ; encoding: [0xfd,0x72,0x0a,0x7e] v_clz_i32_u32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x72,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_clz_i32_u32_e32 v255, 0xaf123456 ; encoding: [0xff,0x72,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cos_f16 v5, v1 -// GFX11: encoding: [0x01,0xc3,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, v1 ; encoding: [0x01,0xc3,0x0a,0x7e] v_cos_f16 v5, v127 -// GFX11: encoding: [0x7f,0xc3,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, v127 ; encoding: [0x7f,0xc3,0x0a,0x7e] v_cos_f16 v5, s1 -// GFX11: encoding: [0x01,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, s1 ; encoding: [0x01,0xc2,0x0a,0x7e] v_cos_f16 v5, s105 -// GFX11: encoding: [0x69,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, s105 ; encoding: [0x69,0xc2,0x0a,0x7e] v_cos_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, vcc_lo ; encoding: [0x6a,0xc2,0x0a,0x7e] v_cos_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, vcc_hi ; encoding: [0x6b,0xc2,0x0a,0x7e] v_cos_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, ttmp15 ; encoding: [0x7b,0xc2,0x0a,0x7e] v_cos_f16 v5, m0 -// GFX11: encoding: [0x7d,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, m0 ; encoding: [0x7d,0xc2,0x0a,0x7e] v_cos_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, exec_lo ; encoding: [0x7e,0xc2,0x0a,0x7e] v_cos_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, exec_hi ; encoding: [0x7f,0xc2,0x0a,0x7e] v_cos_f16 v5, null -// GFX11: encoding: [0x7c,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, null ; encoding: [0x7c,0xc2,0x0a,0x7e] v_cos_f16 v5, -1 -// GFX11: encoding: [0xc1,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, -1 ; encoding: [0xc1,0xc2,0x0a,0x7e] v_cos_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, 0.5 ; encoding: [0xf0,0xc2,0x0a,0x7e] v_cos_f16 v5, src_scc -// GFX11: encoding: [0xfd,0xc2,0x0a,0x7e] +// GFX11: v_cos_f16_e32 v5, src_scc ; encoding: [0xfd,0xc2,0x0a,0x7e] v_cos_f16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xc2,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_cos_f16_e32 v127, 0xfe0b ; encoding: [0xff,0xc2,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_cos_f32 v5, v1 -// GFX11: encoding: [0x01,0x6d,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, v1 ; encoding: [0x01,0x6d,0x0a,0x7e] v_cos_f32 v5, v255 -// GFX11: encoding: [0xff,0x6d,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, v255 ; encoding: [0xff,0x6d,0x0a,0x7e] v_cos_f32 v5, s1 -// GFX11: encoding: [0x01,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, s1 ; encoding: [0x01,0x6c,0x0a,0x7e] v_cos_f32 v5, s105 -// GFX11: encoding: [0x69,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, s105 ; encoding: [0x69,0x6c,0x0a,0x7e] v_cos_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x6c,0x0a,0x7e] v_cos_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x6c,0x0a,0x7e] v_cos_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x6c,0x0a,0x7e] v_cos_f32 v5, m0 -// GFX11: encoding: [0x7d,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, m0 ; encoding: [0x7d,0x6c,0x0a,0x7e] v_cos_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, exec_lo ; encoding: [0x7e,0x6c,0x0a,0x7e] v_cos_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, exec_hi ; encoding: [0x7f,0x6c,0x0a,0x7e] v_cos_f32 v5, null -// GFX11: encoding: [0x7c,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, null ; encoding: [0x7c,0x6c,0x0a,0x7e] v_cos_f32 v5, -1 -// GFX11: encoding: [0xc1,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, -1 ; encoding: [0xc1,0x6c,0x0a,0x7e] v_cos_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, 0.5 ; encoding: [0xf0,0x6c,0x0a,0x7e] v_cos_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x6c,0x0a,0x7e] +// GFX11: v_cos_f32_e32 v5, src_scc ; encoding: [0xfd,0x6c,0x0a,0x7e] v_cos_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x6c,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cos_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x6c,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_ctz_i32_b32 v5, v1 -// GFX11: encoding: [0x01,0x75,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, v1 ; encoding: [0x01,0x75,0x0a,0x7e] v_ctz_i32_b32 v5, v255 -// GFX11: encoding: [0xff,0x75,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, v255 ; encoding: [0xff,0x75,0x0a,0x7e] v_ctz_i32_b32 v5, s1 -// GFX11: encoding: [0x01,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, s1 ; encoding: [0x01,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, s105 -// GFX11: encoding: [0x69,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, s105 ; encoding: [0x69,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, vcc_lo ; encoding: [0x6a,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, vcc_hi ; encoding: [0x6b,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, ttmp15 ; encoding: [0x7b,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, m0 -// GFX11: encoding: [0x7d,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, m0 ; encoding: [0x7d,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, exec_lo -// GFX11: encoding: [0x7e,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, exec_lo ; encoding: [0x7e,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, exec_hi -// GFX11: encoding: [0x7f,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, exec_hi ; encoding: [0x7f,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, null -// GFX11: encoding: [0x7c,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, null ; encoding: [0x7c,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, -1 -// GFX11: encoding: [0xc1,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, -1 ; encoding: [0xc1,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, 0.5 -// GFX11: encoding: [0xf0,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, 0.5 ; encoding: [0xf0,0x74,0x0a,0x7e] v_ctz_i32_b32 v5, src_scc -// GFX11: encoding: [0xfd,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, src_scc ; encoding: [0xfd,0x74,0x0a,0x7e] v_ctz_i32_b32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x74,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_ctz_i32_b32_e32 v255, 0xaf123456 ; encoding: [0xff,0x74,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f16_f32 v5.l, v1 -// GFX11: encoding: [0x01,0x15,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, v1 ; encoding: [0x01,0x15,0x0a,0x7e] v_cvt_f16_f32 v5.l, v255 -// GFX11: encoding: [0xff,0x15,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, v255 ; encoding: [0xff,0x15,0x0a,0x7e] v_cvt_f16_f32 v5.l, s1 -// GFX11: encoding: [0x01,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, s1 ; encoding: [0x01,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, s105 -// GFX11: encoding: [0x69,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, s105 ; encoding: [0x69,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, vcc_lo ; encoding: [0x6a,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, vcc_hi ; encoding: [0x6b,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, ttmp15 ; encoding: [0x7b,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, m0 -// GFX11: encoding: [0x7d,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, m0 ; encoding: [0x7d,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, exec_lo -// GFX11: encoding: [0x7e,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, exec_lo ; encoding: [0x7e,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, exec_hi -// GFX11: encoding: [0x7f,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, exec_hi ; encoding: [0x7f,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, null -// GFX11: encoding: [0x7c,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, null ; encoding: [0x7c,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, -1 -// GFX11: encoding: [0xc1,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, -1 ; encoding: [0xc1,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.l, 0.5 -// GFX11: encoding: [0xf0,0x14,0x0a,0x7e] +// GFX11: v_cvt_f16_f32_e32 v5.l, 0.5 ; encoding: [0xf0,0x14,0x0a,0x7e] v_cvt_f16_f32 v5.h, src_scc -// GFX11: encoding: [0xfd,0x14,0x0a,0x7f] +// GFX11: v_cvt_f16_f32_e32 v5.h, src_scc ; encoding: [0xfd,0x14,0x0a,0x7f] v_cvt_f16_f32 v127.h, 0xaf123456 -// GFX11: encoding: [0xff,0x14,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f16_f32_e32 v127.h, 0xaf123456 ; encoding: [0xff,0x14,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f16_i16 v5.l, v1.l -// GFX11: encoding: [0x01,0xa3,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, v1.l ; encoding: [0x01,0xa3,0x0a,0x7e] v_cvt_f16_i16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xa3,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, v127.l ; encoding: [0x7f,0xa3,0x0a,0x7e] v_cvt_f16_i16 v5.l, v1.h -// GFX11: encoding: [0x81,0xa3,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, v1.h ; encoding: [0x81,0xa3,0x0a,0x7e] v_cvt_f16_i16 v5.l, v127.h -// GFX11: encoding: [0xff,0xa3,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, v127.h ; encoding: [0xff,0xa3,0x0a,0x7e] v_cvt_f16_i16 v5.l, s1 -// GFX11: encoding: [0x01,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, s1 ; encoding: [0x01,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, s105 -// GFX11: encoding: [0x69,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, s105 ; encoding: [0x69,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, m0 -// GFX11: encoding: [0x7d,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, m0 ; encoding: [0x7d,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, exec_lo ; encoding: [0x7e,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, exec_hi ; encoding: [0x7f,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, null -// GFX11: encoding: [0x7c,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, null ; encoding: [0x7c,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.l, -1 -// GFX11: encoding: [0xc1,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, -1 ; encoding: [0xc1,0xa2,0x0a,0x7e] v_cvt_f16_i16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xa2,0xfe,0x7e] +// GFX11: v_cvt_f16_i16_e32 v127.l, 0.5 ; encoding: [0xf0,0xa2,0xfe,0x7e] v_cvt_f16_i16 v5.l, 0.5 -// GFX11: encoding: [0xf0,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, 0.5 ; encoding: [0xf0,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xa2,0x0a,0x7f] +// GFX11: v_cvt_f16_i16_e32 v5.h, src_scc ; encoding: [0xfd,0xa2,0x0a,0x7f] v_cvt_f16_i16 v5.l, 0.5 -// GFX11: encoding: [0xf0,0xa2,0x0a,0x7e] +// GFX11: v_cvt_f16_i16_e32 v5.l, 0.5 ; encoding: [0xf0,0xa2,0x0a,0x7e] v_cvt_f16_i16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xa2,0x0a,0x7f] +// GFX11: v_cvt_f16_i16_e32 v5.h, src_scc ; encoding: [0xfd,0xa2,0x0a,0x7f] v_cvt_f16_i16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xa2,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_i16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xa2,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_f16_u16 v5.l, v1.l -// GFX11: encoding: [0x01,0xa1,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, v1.l ; encoding: [0x01,0xa1,0x0a,0x7e] v_cvt_f16_u16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xa1,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, v127.l ; encoding: [0x7f,0xa1,0x0a,0x7e] v_cvt_f16_u16 v5.l, v1.h -// GFX11: encoding: [0x81,0xa1,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, v1.h ; encoding: [0x81,0xa1,0x0a,0x7e] v_cvt_f16_u16 v5.l, v127.h -// GFX11: encoding: [0xff,0xa1,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, v127.h ; encoding: [0xff,0xa1,0x0a,0x7e] v_cvt_f16_u16 v5.l, s1 -// GFX11: encoding: [0x01,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, s1 ; encoding: [0x01,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, s105 -// GFX11: encoding: [0x69,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, s105 ; encoding: [0x69,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, m0 -// GFX11: encoding: [0x7d,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, m0 ; encoding: [0x7d,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, exec_lo ; encoding: [0x7e,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, exec_hi ; encoding: [0x7f,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, null -// GFX11: encoding: [0x7c,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, null ; encoding: [0x7c,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.l, -1 -// GFX11: encoding: [0xc1,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5.l, -1 ; encoding: [0xc1,0xa0,0x0a,0x7e] v_cvt_f16_u16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xa0,0xfe,0x7e] +// GFX11: v_cvt_f16_u16_e32 v127.l, 0.5 ; encoding: [0xf0,0xa0,0xfe,0x7e] v_cvt_f16_u16 v5, 0.5 -// GFX11: encoding: [0xf0,0xa0,0x0a,0x7e] +// GFX11: v_cvt_f16_u16_e32 v5, 0.5 ; encoding: [0xf0,0xa0,0x0a,0x7e] v_cvt_f16_u16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xa0,0x0a,0x7f] +// GFX11: v_cvt_f16_u16_e32 v5.h, src_scc ; encoding: [0xfd,0xa0,0x0a,0x7f] v_cvt_f16_u16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xa0,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_u16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xa0,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_f32_f16 v5, v1.l -// GFX11: encoding: [0x01,0x17,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, v1.l ; encoding: [0x01,0x17,0x0a,0x7e] v_cvt_f32_f16 v5, v127.l -// GFX11: encoding: [0x7f,0x17,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, v127.l ; encoding: [0x7f,0x17,0x0a,0x7e] v_cvt_f32_f16 v5, v1.h -// GFX11: encoding: [0x81,0x17,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, v1.h ; encoding: [0x81,0x17,0x0a,0x7e] v_cvt_f32_f16 v5, v127.h -// GFX11: encoding: [0xff,0x17,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, v127.h ; encoding: [0xff,0x17,0x0a,0x7e] v_cvt_f32_f16 v5, s1 -// GFX11: encoding: [0x01,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, s1 ; encoding: [0x01,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, s105 -// GFX11: encoding: [0x69,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, s105 ; encoding: [0x69,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, vcc_lo ; encoding: [0x6a,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, vcc_hi ; encoding: [0x6b,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, ttmp15 ; encoding: [0x7b,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, m0 -// GFX11: encoding: [0x7d,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, m0 ; encoding: [0x7d,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, exec_lo ; encoding: [0x7e,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, exec_hi ; encoding: [0x7f,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, null -// GFX11: encoding: [0x7c,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, null ; encoding: [0x7c,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, -1 -// GFX11: encoding: [0xc1,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, -1 ; encoding: [0xc1,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, 0.5 ; encoding: [0xf0,0x16,0x0a,0x7e] v_cvt_f32_f16 v5, src_scc -// GFX11: encoding: [0xfd,0x16,0x0a,0x7e] +// GFX11: v_cvt_f32_f16_e32 v5, src_scc ; encoding: [0xfd,0x16,0x0a,0x7e] v_cvt_f32_f16 v255, 0xfe0b -// GFX11: encoding: [0xff,0x16,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f32_f16_e32 v255, 0xfe0b ; encoding: [0xff,0x16,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_f32_f64 v5, v[1:2] -// GFX11: encoding: [0x01,0x1f,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, v[1:2] ; encoding: [0x01,0x1f,0x0a,0x7e] v_cvt_f32_f64 v5, v[254:255] -// GFX11: encoding: [0xfe,0x1f,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, v[254:255] ; encoding: [0xfe,0x1f,0x0a,0x7e] v_cvt_f32_f64 v5, s[2:3] -// GFX11: encoding: [0x02,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, s[2:3] ; encoding: [0x02,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, s[104:105] -// GFX11: encoding: [0x68,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, s[104:105] ; encoding: [0x68,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, vcc -// GFX11: encoding: [0x6a,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, vcc ; encoding: [0x6a,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, ttmp[14:15] -// GFX11: encoding: [0x7a,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, ttmp[14:15] ; encoding: [0x7a,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, exec -// GFX11: encoding: [0x7e,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, exec ; encoding: [0x7e,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, null -// GFX11: encoding: [0x7c,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, null ; encoding: [0x7c,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, -1 -// GFX11: encoding: [0xc1,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, -1 ; encoding: [0xc1,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, 0.5 -// GFX11: encoding: [0xf0,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, 0.5 ; encoding: [0xf0,0x1e,0x0a,0x7e] v_cvt_f32_f64 v5, src_scc -// GFX11: encoding: [0xfd,0x1e,0x0a,0x7e] +// GFX11: v_cvt_f32_f64_e32 v5, src_scc ; encoding: [0xfd,0x1e,0x0a,0x7e] v_cvt_f32_f64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x1e,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_f64_e32 v255, 0xaf123456 ; encoding: [0xff,0x1e,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f32_i32 v5, v1 -// GFX11: encoding: [0x01,0x0b,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, v1 ; encoding: [0x01,0x0b,0x0a,0x7e] v_cvt_f32_i32 v5, v255 -// GFX11: encoding: [0xff,0x0b,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, v255 ; encoding: [0xff,0x0b,0x0a,0x7e] v_cvt_f32_i32 v5, s1 -// GFX11: encoding: [0x01,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, s1 ; encoding: [0x01,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, s105 -// GFX11: encoding: [0x69,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, s105 ; encoding: [0x69,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, vcc_lo ; encoding: [0x6a,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, vcc_hi ; encoding: [0x6b,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, ttmp15 ; encoding: [0x7b,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, m0 -// GFX11: encoding: [0x7d,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, m0 ; encoding: [0x7d,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, exec_lo -// GFX11: encoding: [0x7e,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, exec_lo ; encoding: [0x7e,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, exec_hi -// GFX11: encoding: [0x7f,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, exec_hi ; encoding: [0x7f,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, null -// GFX11: encoding: [0x7c,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, null ; encoding: [0x7c,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, -1 -// GFX11: encoding: [0xc1,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, -1 ; encoding: [0xc1,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, 0.5 -// GFX11: encoding: [0xf0,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, 0.5 ; encoding: [0xf0,0x0a,0x0a,0x7e] v_cvt_f32_i32 v5, src_scc -// GFX11: encoding: [0xfd,0x0a,0x0a,0x7e] +// GFX11: v_cvt_f32_i32_e32 v5, src_scc ; encoding: [0xfd,0x0a,0x0a,0x7e] v_cvt_f32_i32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x0a,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_i32_e32 v255, 0xaf123456 ; encoding: [0xff,0x0a,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f32_u32 v5, v1 -// GFX11: encoding: [0x01,0x0d,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, v1 ; encoding: [0x01,0x0d,0x0a,0x7e] v_cvt_f32_u32 v5, v255 -// GFX11: encoding: [0xff,0x0d,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, v255 ; encoding: [0xff,0x0d,0x0a,0x7e] v_cvt_f32_u32 v5, s1 -// GFX11: encoding: [0x01,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, s1 ; encoding: [0x01,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, s105 -// GFX11: encoding: [0x69,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, s105 ; encoding: [0x69,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, vcc_lo ; encoding: [0x6a,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, vcc_hi ; encoding: [0x6b,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, ttmp15 ; encoding: [0x7b,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, m0 -// GFX11: encoding: [0x7d,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, m0 ; encoding: [0x7d,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, exec_lo -// GFX11: encoding: [0x7e,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, exec_lo ; encoding: [0x7e,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, exec_hi -// GFX11: encoding: [0x7f,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, exec_hi ; encoding: [0x7f,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, null -// GFX11: encoding: [0x7c,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, null ; encoding: [0x7c,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, -1 -// GFX11: encoding: [0xc1,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, -1 ; encoding: [0xc1,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, 0.5 -// GFX11: encoding: [0xf0,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, 0.5 ; encoding: [0xf0,0x0c,0x0a,0x7e] v_cvt_f32_u32 v5, src_scc -// GFX11: encoding: [0xfd,0x0c,0x0a,0x7e] +// GFX11: v_cvt_f32_u32_e32 v5, src_scc ; encoding: [0xfd,0x0c,0x0a,0x7e] v_cvt_f32_u32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x0c,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_u32_e32 v255, 0xaf123456 ; encoding: [0xff,0x0c,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte0 v5, v1 -// GFX11: encoding: [0x01,0x23,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, v1 ; encoding: [0x01,0x23,0x0a,0x7e] v_cvt_f32_ubyte0 v5, v255 -// GFX11: encoding: [0xff,0x23,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, v255 ; encoding: [0xff,0x23,0x0a,0x7e] v_cvt_f32_ubyte0 v5, s1 -// GFX11: encoding: [0x01,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, s1 ; encoding: [0x01,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, s105 -// GFX11: encoding: [0x69,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, s105 ; encoding: [0x69,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, vcc_lo -// GFX11: encoding: [0x6a,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, vcc_lo ; encoding: [0x6a,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, vcc_hi -// GFX11: encoding: [0x6b,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, vcc_hi ; encoding: [0x6b,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, ttmp15 -// GFX11: encoding: [0x7b,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, ttmp15 ; encoding: [0x7b,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, m0 -// GFX11: encoding: [0x7d,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, m0 ; encoding: [0x7d,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, exec_lo -// GFX11: encoding: [0x7e,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, exec_lo ; encoding: [0x7e,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, exec_hi -// GFX11: encoding: [0x7f,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, exec_hi ; encoding: [0x7f,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, null -// GFX11: encoding: [0x7c,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, null ; encoding: [0x7c,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, -1 -// GFX11: encoding: [0xc1,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, -1 ; encoding: [0xc1,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, 0.5 -// GFX11: encoding: [0xf0,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, 0.5 ; encoding: [0xf0,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v5, src_scc -// GFX11: encoding: [0xfd,0x22,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte0_e32 v5, src_scc ; encoding: [0xfd,0x22,0x0a,0x7e] v_cvt_f32_ubyte0 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x22,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte0_e32 v255, 0xaf123456 ; encoding: [0xff,0x22,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte1 v5, v1 -// GFX11: encoding: [0x01,0x25,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, v1 ; encoding: [0x01,0x25,0x0a,0x7e] v_cvt_f32_ubyte1 v5, v255 -// GFX11: encoding: [0xff,0x25,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, v255 ; encoding: [0xff,0x25,0x0a,0x7e] v_cvt_f32_ubyte1 v5, s1 -// GFX11: encoding: [0x01,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, s1 ; encoding: [0x01,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, s105 -// GFX11: encoding: [0x69,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, s105 ; encoding: [0x69,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, vcc_lo -// GFX11: encoding: [0x6a,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, vcc_lo ; encoding: [0x6a,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, vcc_hi -// GFX11: encoding: [0x6b,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, vcc_hi ; encoding: [0x6b,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, ttmp15 -// GFX11: encoding: [0x7b,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, ttmp15 ; encoding: [0x7b,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, m0 -// GFX11: encoding: [0x7d,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, m0 ; encoding: [0x7d,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, exec_lo -// GFX11: encoding: [0x7e,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, exec_lo ; encoding: [0x7e,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, exec_hi -// GFX11: encoding: [0x7f,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, exec_hi ; encoding: [0x7f,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, null -// GFX11: encoding: [0x7c,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, null ; encoding: [0x7c,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, -1 -// GFX11: encoding: [0xc1,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, -1 ; encoding: [0xc1,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, 0.5 -// GFX11: encoding: [0xf0,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, 0.5 ; encoding: [0xf0,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v5, src_scc -// GFX11: encoding: [0xfd,0x24,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte1_e32 v5, src_scc ; encoding: [0xfd,0x24,0x0a,0x7e] v_cvt_f32_ubyte1 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x24,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte1_e32 v255, 0xaf123456 ; encoding: [0xff,0x24,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte2 v5, v1 -// GFX11: encoding: [0x01,0x27,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, v1 ; encoding: [0x01,0x27,0x0a,0x7e] v_cvt_f32_ubyte2 v5, v255 -// GFX11: encoding: [0xff,0x27,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, v255 ; encoding: [0xff,0x27,0x0a,0x7e] v_cvt_f32_ubyte2 v5, s1 -// GFX11: encoding: [0x01,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, s1 ; encoding: [0x01,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, s105 -// GFX11: encoding: [0x69,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, s105 ; encoding: [0x69,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, vcc_lo -// GFX11: encoding: [0x6a,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, vcc_lo ; encoding: [0x6a,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, vcc_hi -// GFX11: encoding: [0x6b,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, vcc_hi ; encoding: [0x6b,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, ttmp15 -// GFX11: encoding: [0x7b,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, ttmp15 ; encoding: [0x7b,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, m0 -// GFX11: encoding: [0x7d,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, m0 ; encoding: [0x7d,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, exec_lo -// GFX11: encoding: [0x7e,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, exec_lo ; encoding: [0x7e,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, exec_hi -// GFX11: encoding: [0x7f,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, exec_hi ; encoding: [0x7f,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, null -// GFX11: encoding: [0x7c,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, null ; encoding: [0x7c,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, -1 -// GFX11: encoding: [0xc1,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, -1 ; encoding: [0xc1,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, 0.5 -// GFX11: encoding: [0xf0,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, 0.5 ; encoding: [0xf0,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v5, src_scc -// GFX11: encoding: [0xfd,0x26,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte2_e32 v5, src_scc ; encoding: [0xfd,0x26,0x0a,0x7e] v_cvt_f32_ubyte2 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x26,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte2_e32 v255, 0xaf123456 ; encoding: [0xff,0x26,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte3 v5, v1 -// GFX11: encoding: [0x01,0x29,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, v1 ; encoding: [0x01,0x29,0x0a,0x7e] v_cvt_f32_ubyte3 v5, v255 -// GFX11: encoding: [0xff,0x29,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, v255 ; encoding: [0xff,0x29,0x0a,0x7e] v_cvt_f32_ubyte3 v5, s1 -// GFX11: encoding: [0x01,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, s1 ; encoding: [0x01,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, s105 -// GFX11: encoding: [0x69,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, s105 ; encoding: [0x69,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, vcc_lo -// GFX11: encoding: [0x6a,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, vcc_lo ; encoding: [0x6a,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, vcc_hi -// GFX11: encoding: [0x6b,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, vcc_hi ; encoding: [0x6b,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, ttmp15 -// GFX11: encoding: [0x7b,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, ttmp15 ; encoding: [0x7b,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, m0 -// GFX11: encoding: [0x7d,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, m0 ; encoding: [0x7d,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, exec_lo -// GFX11: encoding: [0x7e,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, exec_lo ; encoding: [0x7e,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, exec_hi -// GFX11: encoding: [0x7f,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, exec_hi ; encoding: [0x7f,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, null -// GFX11: encoding: [0x7c,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, null ; encoding: [0x7c,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, -1 -// GFX11: encoding: [0xc1,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, -1 ; encoding: [0xc1,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, 0.5 -// GFX11: encoding: [0xf0,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, 0.5 ; encoding: [0xf0,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v5, src_scc -// GFX11: encoding: [0xfd,0x28,0x0a,0x7e] +// GFX11: v_cvt_f32_ubyte3_e32 v5, src_scc ; encoding: [0xfd,0x28,0x0a,0x7e] v_cvt_f32_ubyte3 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x28,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte3_e32 v255, 0xaf123456 ; encoding: [0xff,0x28,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f64_f32 v[5:6], v1 -// GFX11: encoding: [0x01,0x21,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], v1 ; encoding: [0x01,0x21,0x0a,0x7e] v_cvt_f64_f32 v[5:6], v255 -// GFX11: encoding: [0xff,0x21,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], v255 ; encoding: [0xff,0x21,0x0a,0x7e] v_cvt_f64_f32 v[5:6], s1 -// GFX11: encoding: [0x01,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], s1 ; encoding: [0x01,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], s105 -// GFX11: encoding: [0x69,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], s105 ; encoding: [0x69,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], vcc_lo -// GFX11: encoding: [0x6a,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], vcc_lo ; encoding: [0x6a,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], vcc_hi -// GFX11: encoding: [0x6b,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], vcc_hi ; encoding: [0x6b,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], ttmp15 -// GFX11: encoding: [0x7b,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], ttmp15 ; encoding: [0x7b,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], m0 -// GFX11: encoding: [0x7d,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], m0 ; encoding: [0x7d,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], exec_lo -// GFX11: encoding: [0x7e,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], exec_lo ; encoding: [0x7e,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], exec_hi -// GFX11: encoding: [0x7f,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], exec_hi ; encoding: [0x7f,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], null -// GFX11: encoding: [0x7c,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], null ; encoding: [0x7c,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], -1 -// GFX11: encoding: [0xc1,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], -1 ; encoding: [0xc1,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], 0.5 ; encoding: [0xf0,0x20,0x0a,0x7e] v_cvt_f64_f32 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x20,0x0a,0x7e] +// GFX11: v_cvt_f64_f32_e32 v[5:6], src_scc ; encoding: [0xfd,0x20,0x0a,0x7e] v_cvt_f64_f32 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x20,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f64_f32_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x20,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f64_i32 v[5:6], v1 -// GFX11: encoding: [0x01,0x09,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], v1 ; encoding: [0x01,0x09,0x0a,0x7e] v_cvt_f64_i32 v[5:6], v255 -// GFX11: encoding: [0xff,0x09,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], v255 ; encoding: [0xff,0x09,0x0a,0x7e] v_cvt_f64_i32 v[5:6], s1 -// GFX11: encoding: [0x01,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], s1 ; encoding: [0x01,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], s105 -// GFX11: encoding: [0x69,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], s105 ; encoding: [0x69,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], vcc_lo -// GFX11: encoding: [0x6a,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], vcc_lo ; encoding: [0x6a,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], vcc_hi -// GFX11: encoding: [0x6b,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], vcc_hi ; encoding: [0x6b,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], ttmp15 -// GFX11: encoding: [0x7b,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], ttmp15 ; encoding: [0x7b,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], m0 -// GFX11: encoding: [0x7d,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], m0 ; encoding: [0x7d,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], exec_lo -// GFX11: encoding: [0x7e,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], exec_lo ; encoding: [0x7e,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], exec_hi -// GFX11: encoding: [0x7f,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], exec_hi ; encoding: [0x7f,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], null -// GFX11: encoding: [0x7c,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], null ; encoding: [0x7c,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], -1 -// GFX11: encoding: [0xc1,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], -1 ; encoding: [0xc1,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], 0.5 ; encoding: [0xf0,0x08,0x0a,0x7e] v_cvt_f64_i32 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x08,0x0a,0x7e] +// GFX11: v_cvt_f64_i32_e32 v[5:6], src_scc ; encoding: [0xfd,0x08,0x0a,0x7e] v_cvt_f64_i32 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x08,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f64_i32_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x08,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_cvt_f64_u32 v[5:6], v1 -// GFX11: encoding: [0x01,0x2d,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], v1 ; encoding: [0x01,0x2d,0x0a,0x7e] v_cvt_f64_u32 v[5:6], v255 -// GFX11: encoding: [0xff,0x2d,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], v255 ; encoding: [0xff,0x2d,0x0a,0x7e] v_cvt_f64_u32 v[5:6], s1 -// GFX11: encoding: [0x01,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], s1 ; encoding: [0x01,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], s105 -// GFX11: encoding: [0x69,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], s105 ; encoding: [0x69,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], vcc_lo -// GFX11: encoding: [0x6a,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], vcc_lo ; encoding: [0x6a,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], vcc_hi -// GFX11: encoding: [0x6b,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], vcc_hi ; encoding: [0x6b,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], ttmp15 -// GFX11: encoding: [0x7b,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], ttmp15 ; encoding: [0x7b,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], m0 -// GFX11: encoding: [0x7d,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], m0 ; encoding: [0x7d,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], exec_lo -// GFX11: encoding: [0x7e,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], exec_lo ; encoding: [0x7e,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], exec_hi -// GFX11: encoding: [0x7f,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], exec_hi ; encoding: [0x7f,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], null -// GFX11: encoding: [0x7c,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], null ; encoding: [0x7c,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], -1 -// GFX11: encoding: [0xc1,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], -1 ; encoding: [0xc1,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], 0.5 ; encoding: [0xf0,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x2c,0x0a,0x7e] +// GFX11: v_cvt_f64_u32_e32 v[5:6], src_scc ; encoding: [0xfd,0x2c,0x0a,0x7e] v_cvt_f64_u32 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x2c,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f64_u32_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x2c,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_cvt_floor_i32_f32 v5, v1 -// GFX11: encoding: [0x01,0x1b,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, v1 ; encoding: [0x01,0x1b,0x0a,0x7e] v_cvt_floor_i32_f32 v5, v255 -// GFX11: encoding: [0xff,0x1b,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, v255 ; encoding: [0xff,0x1b,0x0a,0x7e] v_cvt_floor_i32_f32 v5, s1 -// GFX11: encoding: [0x01,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, s1 ; encoding: [0x01,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, s105 -// GFX11: encoding: [0x69,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, s105 ; encoding: [0x69,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, m0 ; encoding: [0x7d,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, null -// GFX11: encoding: [0x7c,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, null ; encoding: [0x7c,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, -1 ; encoding: [0xc1,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, src_scc ; encoding: [0xfd,0x1a,0x0a,0x7e] v_cvt_floor_i32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x1a,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_floor_i32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x1a,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_flr_i32_f32 v5, v1 -// GFX11: encoding: [0x01,0x1b,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, v1 ; encoding: [0x01,0x1b,0x0a,0x7e] v_cvt_flr_i32_f32 v5, v255 -// GFX11: encoding: [0xff,0x1b,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, v255 ; encoding: [0xff,0x1b,0x0a,0x7e] v_cvt_flr_i32_f32 v5, s1 -// GFX11: encoding: [0x01,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, s1 ; encoding: [0x01,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, s105 -// GFX11: encoding: [0x69,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, s105 ; encoding: [0x69,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, m0 ; encoding: [0x7d,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, null -// GFX11: encoding: [0x7c,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, null ; encoding: [0x7c,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, -1 ; encoding: [0xc1,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x1a,0x0a,0x7e] +// GFX11: v_cvt_floor_i32_f32_e32 v5, src_scc ; encoding: [0xfd,0x1a,0x0a,0x7e] v_cvt_flr_i32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x1a,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_floor_i32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x1a,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_i16_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xa7,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, v1.l ; encoding: [0x01,0xa7,0x0a,0x7e] v_cvt_i16_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xa7,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xa7,0x0a,0x7e] v_cvt_i16_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xa7,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, v1.h ; encoding: [0x81,0xa7,0x0a,0x7e] v_cvt_i16_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xa7,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, v127.h ; encoding: [0xff,0xa7,0x0a,0x7e] v_cvt_i16_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, s1 ; encoding: [0x01,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, s105 ; encoding: [0x69,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, m0 ; encoding: [0x7d,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, null -// GFX11: encoding: [0x7c,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, null ; encoding: [0x7c,0xa6,0x0a,0x7e] v_cvt_i16_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xa6,0x0a,0x7e] +// GFX11: v_cvt_i16_f16_e32 v5.l, -1 ; encoding: [0xc1,0xa6,0x0a,0x7e] v_cvt_i16_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xa6,0xfe,0x7e] +// GFX11: v_cvt_i16_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xa6,0xfe,0x7e] v_cvt_i16_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xa6,0x0a,0x7f] +// GFX11: v_cvt_i16_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xa6,0x0a,0x7f] v_cvt_i16_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xa6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_i16_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xa6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_i32_f32 v5, v1 -// GFX11: encoding: [0x01,0x11,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, v1 ; encoding: [0x01,0x11,0x0a,0x7e] v_cvt_i32_f32 v5, v255 -// GFX11: encoding: [0xff,0x11,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, v255 ; encoding: [0xff,0x11,0x0a,0x7e] v_cvt_i32_f32 v5, s1 -// GFX11: encoding: [0x01,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, s1 ; encoding: [0x01,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, s105 -// GFX11: encoding: [0x69,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, s105 ; encoding: [0x69,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, m0 ; encoding: [0x7d,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, null -// GFX11: encoding: [0x7c,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, null ; encoding: [0x7c,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, -1 ; encoding: [0xc1,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x10,0x0a,0x7e] v_cvt_i32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x10,0x0a,0x7e] +// GFX11: v_cvt_i32_f32_e32 v5, src_scc ; encoding: [0xfd,0x10,0x0a,0x7e] v_cvt_i32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x10,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_i32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x10,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_i32_f64 v5, v[1:2] -// GFX11: encoding: [0x01,0x07,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, v[1:2] ; encoding: [0x01,0x07,0x0a,0x7e] v_cvt_i32_f64 v5, v[254:255] -// GFX11: encoding: [0xfe,0x07,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, v[254:255] ; encoding: [0xfe,0x07,0x0a,0x7e] v_cvt_i32_f64 v5, s[2:3] -// GFX11: encoding: [0x02,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, s[2:3] ; encoding: [0x02,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, s[104:105] -// GFX11: encoding: [0x68,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, s[104:105] ; encoding: [0x68,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, vcc -// GFX11: encoding: [0x6a,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, vcc ; encoding: [0x6a,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, ttmp[14:15] -// GFX11: encoding: [0x7a,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, ttmp[14:15] ; encoding: [0x7a,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, exec -// GFX11: encoding: [0x7e,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, exec ; encoding: [0x7e,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, null -// GFX11: encoding: [0x7c,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, null ; encoding: [0x7c,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, -1 -// GFX11: encoding: [0xc1,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, -1 ; encoding: [0xc1,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, 0.5 -// GFX11: encoding: [0xf0,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, 0.5 ; encoding: [0xf0,0x06,0x0a,0x7e] v_cvt_i32_f64 v5, src_scc -// GFX11: encoding: [0xfd,0x06,0x0a,0x7e] +// GFX11: v_cvt_i32_f64_e32 v5, src_scc ; encoding: [0xfd,0x06,0x0a,0x7e] v_cvt_i32_f64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x06,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_i32_f64_e32 v255, 0xaf123456 ; encoding: [0xff,0x06,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_i32_i16 v5, v1 -// GFX11: encoding: [0x01,0xd5,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, v1 ; encoding: [0x01,0xd5,0x0a,0x7e] v_cvt_i32_i16 v5, v127 -// GFX11: encoding: [0x7f,0xd5,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, v127 ; encoding: [0x7f,0xd5,0x0a,0x7e] v_cvt_i32_i16 v5, s1 -// GFX11: encoding: [0x01,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, s1 ; encoding: [0x01,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, s105 -// GFX11: encoding: [0x69,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, s105 ; encoding: [0x69,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, vcc_lo ; encoding: [0x6a,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, vcc_hi ; encoding: [0x6b,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, ttmp15 ; encoding: [0x7b,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, m0 -// GFX11: encoding: [0x7d,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, m0 ; encoding: [0x7d,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, exec_lo -// GFX11: encoding: [0x7e,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, exec_lo ; encoding: [0x7e,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, exec_hi -// GFX11: encoding: [0x7f,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, exec_hi ; encoding: [0x7f,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, null -// GFX11: encoding: [0x7c,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, null ; encoding: [0x7c,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, -1 -// GFX11: encoding: [0xc1,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, -1 ; encoding: [0xc1,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, 0.5 -// GFX11: encoding: [0xf0,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, 0.5 ; encoding: [0xf0,0xd4,0x0a,0x7e] v_cvt_i32_i16 v5, src_scc -// GFX11: encoding: [0xfd,0xd4,0x0a,0x7e] +// GFX11: v_cvt_i32_i16_e32 v5, src_scc ; encoding: [0xfd,0xd4,0x0a,0x7e] v_cvt_i32_i16 v255, 0xfe0b -// GFX11: encoding: [0xff,0xd4,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_i32_i16_e32 v255, 0xfe0b ; encoding: [0xff,0xd4,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_nearest_i32_f32 v5, v1 -// GFX11: encoding: [0x01,0x19,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, v1 ; encoding: [0x01,0x19,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, v255 -// GFX11: encoding: [0xff,0x19,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, v255 ; encoding: [0xff,0x19,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, s1 -// GFX11: encoding: [0x01,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, s1 ; encoding: [0x01,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, s105 -// GFX11: encoding: [0x69,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, s105 ; encoding: [0x69,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, m0 ; encoding: [0x7d,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, null -// GFX11: encoding: [0x7c,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, null ; encoding: [0x7c,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, -1 ; encoding: [0xc1,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, src_scc ; encoding: [0xfd,0x18,0x0a,0x7e] v_cvt_nearest_i32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x18,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_nearest_i32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x18,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_norm_i16_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xc7,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, v1.l ; encoding: [0x01,0xc7,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xc7,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xc7,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xc7,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, v1.h ; encoding: [0x81,0xc7,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xc7,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, v127.h ; encoding: [0xff,0xc7,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, s1 ; encoding: [0x01,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, s105 ; encoding: [0x69,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, m0 ; encoding: [0x7d,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, null -// GFX11: encoding: [0x7c,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, null ; encoding: [0x7c,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xc6,0x0a,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v5.l, -1 ; encoding: [0xc1,0xc6,0x0a,0x7e] v_cvt_norm_i16_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xc6,0xfe,0x7e] +// GFX11: v_cvt_norm_i16_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xc6,0xfe,0x7e] v_cvt_norm_i16_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xc6,0x0a,0x7f] +// GFX11: v_cvt_norm_i16_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xc6,0x0a,0x7f] v_cvt_norm_i16_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xc6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xc6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_norm_u16_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xc9,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, v1.l ; encoding: [0x01,0xc9,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xc9,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xc9,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xc9,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, v1.h ; encoding: [0x81,0xc9,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xc9,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, v127.h ; encoding: [0xff,0xc9,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, s1 ; encoding: [0x01,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, s105 ; encoding: [0x69,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, m0 ; encoding: [0x7d,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, null -// GFX11: encoding: [0x7c,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, null ; encoding: [0x7c,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xc8,0x0a,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v5.l, -1 ; encoding: [0xc1,0xc8,0x0a,0x7e] v_cvt_norm_u16_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xc8,0xfe,0x7e] +// GFX11: v_cvt_norm_u16_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xc8,0xfe,0x7e] v_cvt_norm_u16_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xc8,0x0a,0x7f] +// GFX11: v_cvt_norm_u16_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xc8,0x0a,0x7f] v_cvt_norm_u16_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xc8,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xc8,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_off_f32_i4 v5, v1 -// GFX11: encoding: [0x01,0x1d,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, v1 ; encoding: [0x01,0x1d,0x0a,0x7e] v_cvt_off_f32_i4 v5, v255 -// GFX11: encoding: [0xff,0x1d,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, v255 ; encoding: [0xff,0x1d,0x0a,0x7e] v_cvt_off_f32_i4 v5, s1 -// GFX11: encoding: [0x01,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, s1 ; encoding: [0x01,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, s105 -// GFX11: encoding: [0x69,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, s105 ; encoding: [0x69,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, vcc_lo -// GFX11: encoding: [0x6a,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, vcc_lo ; encoding: [0x6a,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, vcc_hi -// GFX11: encoding: [0x6b,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, vcc_hi ; encoding: [0x6b,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, ttmp15 -// GFX11: encoding: [0x7b,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, ttmp15 ; encoding: [0x7b,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, m0 -// GFX11: encoding: [0x7d,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, m0 ; encoding: [0x7d,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, exec_lo -// GFX11: encoding: [0x7e,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, exec_lo ; encoding: [0x7e,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, exec_hi -// GFX11: encoding: [0x7f,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, exec_hi ; encoding: [0x7f,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, null -// GFX11: encoding: [0x7c,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, null ; encoding: [0x7c,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, -1 -// GFX11: encoding: [0xc1,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, -1 ; encoding: [0xc1,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, 0.5 -// GFX11: encoding: [0xf0,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, 0.5 ; encoding: [0xf0,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v5, src_scc -// GFX11: encoding: [0xfd,0x1c,0x0a,0x7e] +// GFX11: v_cvt_off_f32_i4_e32 v5, src_scc ; encoding: [0xfd,0x1c,0x0a,0x7e] v_cvt_off_f32_i4 v255, 0x4f -// GFX11: encoding: [0xff,0x1c,0xfe,0x7f,0x4f,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e32 v255, 0x4f ; encoding: [0xff,0x1c,0xfe,0x7f,0x4f,0x00,0x00,0x00] v_cvt_rpi_i32_f32 v5, v1 -// GFX11: encoding: [0x01,0x19,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, v1 ; encoding: [0x01,0x19,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, v255 -// GFX11: encoding: [0xff,0x19,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, v255 ; encoding: [0xff,0x19,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, s1 -// GFX11: encoding: [0x01,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, s1 ; encoding: [0x01,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, s105 -// GFX11: encoding: [0x69,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, s105 ; encoding: [0x69,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, m0 ; encoding: [0x7d,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, null -// GFX11: encoding: [0x7c,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, null ; encoding: [0x7c,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, -1 ; encoding: [0xc1,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x18,0x0a,0x7e] +// GFX11: v_cvt_nearest_i32_f32_e32 v5, src_scc ; encoding: [0xfd,0x18,0x0a,0x7e] v_cvt_rpi_i32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x18,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_nearest_i32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x18,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_u16_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xa5,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, v1.l ; encoding: [0x01,0xa5,0x0a,0x7e] v_cvt_u16_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xa5,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xa5,0x0a,0x7e] v_cvt_u16_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xa5,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, v1.h ; encoding: [0x81,0xa5,0x0a,0x7e] v_cvt_u16_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xa5,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, v127.h ; encoding: [0xff,0xa5,0x0a,0x7e] v_cvt_u16_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, s1 ; encoding: [0x01,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, s105 ; encoding: [0x69,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, m0 ; encoding: [0x7d,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, null -// GFX11: encoding: [0x7c,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, null ; encoding: [0x7c,0xa4,0x0a,0x7e] v_cvt_u16_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xa4,0x0a,0x7e] +// GFX11: v_cvt_u16_f16_e32 v5.l, -1 ; encoding: [0xc1,0xa4,0x0a,0x7e] v_cvt_u16_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xa4,0xfe,0x7e] +// GFX11: v_cvt_u16_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xa4,0xfe,0x7e] v_cvt_u16_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xa4,0x0a,0x7f] +// GFX11: v_cvt_u16_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xa4,0x0a,0x7f] v_cvt_u16_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xa4,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_u16_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xa4,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_cvt_u32_f32 v5, v1 -// GFX11: encoding: [0x01,0x0f,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, v1 ; encoding: [0x01,0x0f,0x0a,0x7e] v_cvt_u32_f32 v5, v255 -// GFX11: encoding: [0xff,0x0f,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, v255 ; encoding: [0xff,0x0f,0x0a,0x7e] v_cvt_u32_f32 v5, s1 -// GFX11: encoding: [0x01,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, s1 ; encoding: [0x01,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, s105 -// GFX11: encoding: [0x69,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, s105 ; encoding: [0x69,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, m0 ; encoding: [0x7d,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, null -// GFX11: encoding: [0x7c,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, null ; encoding: [0x7c,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, -1 ; encoding: [0xc1,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x0e,0x0a,0x7e] v_cvt_u32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x0e,0x0a,0x7e] +// GFX11: v_cvt_u32_f32_e32 v5, src_scc ; encoding: [0xfd,0x0e,0x0a,0x7e] v_cvt_u32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x0e,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_u32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x0e,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_u32_f64 v5, v[1:2] -// GFX11: encoding: [0x01,0x2b,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, v[1:2] ; encoding: [0x01,0x2b,0x0a,0x7e] v_cvt_u32_f64 v5, v[254:255] -// GFX11: encoding: [0xfe,0x2b,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, v[254:255] ; encoding: [0xfe,0x2b,0x0a,0x7e] v_cvt_u32_f64 v5, s[2:3] -// GFX11: encoding: [0x02,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, s[2:3] ; encoding: [0x02,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, s[104:105] -// GFX11: encoding: [0x68,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, s[104:105] ; encoding: [0x68,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, vcc -// GFX11: encoding: [0x6a,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, vcc ; encoding: [0x6a,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, ttmp[14:15] -// GFX11: encoding: [0x7a,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, ttmp[14:15] ; encoding: [0x7a,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, exec -// GFX11: encoding: [0x7e,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, exec ; encoding: [0x7e,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, null -// GFX11: encoding: [0x7c,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, null ; encoding: [0x7c,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, -1 -// GFX11: encoding: [0xc1,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, -1 ; encoding: [0xc1,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, 0.5 -// GFX11: encoding: [0xf0,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, 0.5 ; encoding: [0xf0,0x2a,0x0a,0x7e] v_cvt_u32_f64 v5, src_scc -// GFX11: encoding: [0xfd,0x2a,0x0a,0x7e] +// GFX11: v_cvt_u32_f64_e32 v5, src_scc ; encoding: [0xfd,0x2a,0x0a,0x7e] v_cvt_u32_f64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x2a,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_u32_f64_e32 v255, 0xaf123456 ; encoding: [0xff,0x2a,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_cvt_u32_u16 v5, v1 -// GFX11: encoding: [0x01,0xd7,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, v1 ; encoding: [0x01,0xd7,0x0a,0x7e] v_cvt_u32_u16 v5, v127 -// GFX11: encoding: [0x7f,0xd7,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, v127 ; encoding: [0x7f,0xd7,0x0a,0x7e] v_cvt_u32_u16 v5, s1 -// GFX11: encoding: [0x01,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, s1 ; encoding: [0x01,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, s105 -// GFX11: encoding: [0x69,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, s105 ; encoding: [0x69,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, vcc_lo ; encoding: [0x6a,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, vcc_hi ; encoding: [0x6b,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, ttmp15 ; encoding: [0x7b,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, m0 -// GFX11: encoding: [0x7d,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, m0 ; encoding: [0x7d,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, exec_lo -// GFX11: encoding: [0x7e,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, exec_lo ; encoding: [0x7e,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, exec_hi -// GFX11: encoding: [0x7f,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, exec_hi ; encoding: [0x7f,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, null -// GFX11: encoding: [0x7c,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, null ; encoding: [0x7c,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, -1 -// GFX11: encoding: [0xc1,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, -1 ; encoding: [0xc1,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, 0.5 -// GFX11: encoding: [0xf0,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, 0.5 ; encoding: [0xf0,0xd6,0x0a,0x7e] v_cvt_u32_u16 v5, src_scc -// GFX11: encoding: [0xfd,0xd6,0x0a,0x7e] +// GFX11: v_cvt_u32_u16_e32 v5, src_scc ; encoding: [0xfd,0xd6,0x0a,0x7e] v_cvt_u32_u16 v255, 0xfe0b -// GFX11: encoding: [0xff,0xd6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_u32_u16_e32 v255, 0xfe0b ; encoding: [0xff,0xd6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_exp_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xb1,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, v1.l ; encoding: [0x01,0xb1,0x0a,0x7e] v_exp_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xb1,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xb1,0x0a,0x7e] v_exp_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xb1,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, v1.h ; encoding: [0x81,0xb1,0x0a,0x7e] v_exp_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xb1,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, v127.h ; encoding: [0xff,0xb1,0x0a,0x7e] v_exp_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, s1 ; encoding: [0x01,0xb0,0x0a,0x7e] v_exp_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, s105 ; encoding: [0x69,0xb0,0x0a,0x7e] v_exp_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xb0,0x0a,0x7e] v_exp_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xb0,0x0a,0x7e] v_exp_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xb0,0x0a,0x7e] v_exp_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, m0 ; encoding: [0x7d,0xb0,0x0a,0x7e] v_exp_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xb0,0x0a,0x7e] v_exp_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xb0,0x0a,0x7e] v_exp_f16 v5.l, null -// GFX11: encoding: [0x7c,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, null ; encoding: [0x7c,0xb0,0x0a,0x7e] v_exp_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xb0,0x0a,0x7e] +// GFX11: v_exp_f16_e32 v5.l, -1 ; encoding: [0xc1,0xb0,0x0a,0x7e] v_exp_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xb0,0xfe,0x7e] +// GFX11: v_exp_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xb0,0xfe,0x7e] v_exp_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xb0,0x0a,0x7f] +// GFX11: v_exp_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xb0,0x0a,0x7f] v_exp_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xb0,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_exp_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xb0,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_exp_f32 v5, v1 -// GFX11: encoding: [0x01,0x4b,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, v1 ; encoding: [0x01,0x4b,0x0a,0x7e] v_exp_f32 v5, v255 -// GFX11: encoding: [0xff,0x4b,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, v255 ; encoding: [0xff,0x4b,0x0a,0x7e] v_exp_f32 v5, s1 -// GFX11: encoding: [0x01,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, s1 ; encoding: [0x01,0x4a,0x0a,0x7e] v_exp_f32 v5, s105 -// GFX11: encoding: [0x69,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, s105 ; encoding: [0x69,0x4a,0x0a,0x7e] v_exp_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x4a,0x0a,0x7e] v_exp_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x4a,0x0a,0x7e] v_exp_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x4a,0x0a,0x7e] v_exp_f32 v5, m0 -// GFX11: encoding: [0x7d,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, m0 ; encoding: [0x7d,0x4a,0x0a,0x7e] v_exp_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, exec_lo ; encoding: [0x7e,0x4a,0x0a,0x7e] v_exp_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, exec_hi ; encoding: [0x7f,0x4a,0x0a,0x7e] v_exp_f32 v5, null -// GFX11: encoding: [0x7c,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, null ; encoding: [0x7c,0x4a,0x0a,0x7e] v_exp_f32 v5, -1 -// GFX11: encoding: [0xc1,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, -1 ; encoding: [0xc1,0x4a,0x0a,0x7e] v_exp_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, 0.5 ; encoding: [0xf0,0x4a,0x0a,0x7e] v_exp_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x4a,0x0a,0x7e] +// GFX11: v_exp_f32_e32 v5, src_scc ; encoding: [0xfd,0x4a,0x0a,0x7e] v_exp_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x4a,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_exp_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x4a,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_ffbh_i32 v5, v1 -// GFX11: encoding: [0x01,0x77,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, v1 ; encoding: [0x01,0x77,0x0a,0x7e] v_ffbh_i32 v5, v255 -// GFX11: encoding: [0xff,0x77,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, v255 ; encoding: [0xff,0x77,0x0a,0x7e] v_ffbh_i32 v5, s1 -// GFX11: encoding: [0x01,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, s1 ; encoding: [0x01,0x76,0x0a,0x7e] v_ffbh_i32 v5, s105 -// GFX11: encoding: [0x69,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, s105 ; encoding: [0x69,0x76,0x0a,0x7e] v_ffbh_i32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, vcc_lo ; encoding: [0x6a,0x76,0x0a,0x7e] v_ffbh_i32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, vcc_hi ; encoding: [0x6b,0x76,0x0a,0x7e] v_ffbh_i32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, ttmp15 ; encoding: [0x7b,0x76,0x0a,0x7e] v_ffbh_i32 v5, m0 -// GFX11: encoding: [0x7d,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, m0 ; encoding: [0x7d,0x76,0x0a,0x7e] v_ffbh_i32 v5, exec_lo -// GFX11: encoding: [0x7e,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, exec_lo ; encoding: [0x7e,0x76,0x0a,0x7e] v_ffbh_i32 v5, exec_hi -// GFX11: encoding: [0x7f,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, exec_hi ; encoding: [0x7f,0x76,0x0a,0x7e] v_ffbh_i32 v5, null -// GFX11: encoding: [0x7c,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, null ; encoding: [0x7c,0x76,0x0a,0x7e] v_ffbh_i32 v5, -1 -// GFX11: encoding: [0xc1,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, -1 ; encoding: [0xc1,0x76,0x0a,0x7e] v_ffbh_i32 v5, 0.5 -// GFX11: encoding: [0xf0,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, 0.5 ; encoding: [0xf0,0x76,0x0a,0x7e] v_ffbh_i32 v5, src_scc -// GFX11: encoding: [0xfd,0x76,0x0a,0x7e] +// GFX11: v_cls_i32_e32 v5, src_scc ; encoding: [0xfd,0x76,0x0a,0x7e] v_ffbh_i32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x76,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_cls_i32_e32 v255, 0xaf123456 ; encoding: [0xff,0x76,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_ffbh_u32 v5, v1 -// GFX11: encoding: [0x01,0x73,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, v1 ; encoding: [0x01,0x73,0x0a,0x7e] v_ffbh_u32 v5, v255 -// GFX11: encoding: [0xff,0x73,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, v255 ; encoding: [0xff,0x73,0x0a,0x7e] v_ffbh_u32 v5, s1 -// GFX11: encoding: [0x01,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, s1 ; encoding: [0x01,0x72,0x0a,0x7e] v_ffbh_u32 v5, s105 -// GFX11: encoding: [0x69,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, s105 ; encoding: [0x69,0x72,0x0a,0x7e] v_ffbh_u32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, vcc_lo ; encoding: [0x6a,0x72,0x0a,0x7e] v_ffbh_u32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, vcc_hi ; encoding: [0x6b,0x72,0x0a,0x7e] v_ffbh_u32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, ttmp15 ; encoding: [0x7b,0x72,0x0a,0x7e] v_ffbh_u32 v5, m0 -// GFX11: encoding: [0x7d,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, m0 ; encoding: [0x7d,0x72,0x0a,0x7e] v_ffbh_u32 v5, exec_lo -// GFX11: encoding: [0x7e,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, exec_lo ; encoding: [0x7e,0x72,0x0a,0x7e] v_ffbh_u32 v5, exec_hi -// GFX11: encoding: [0x7f,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, exec_hi ; encoding: [0x7f,0x72,0x0a,0x7e] v_ffbh_u32 v5, null -// GFX11: encoding: [0x7c,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, null ; encoding: [0x7c,0x72,0x0a,0x7e] v_ffbh_u32 v5, -1 -// GFX11: encoding: [0xc1,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, -1 ; encoding: [0xc1,0x72,0x0a,0x7e] v_ffbh_u32 v5, 0.5 -// GFX11: encoding: [0xf0,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, 0.5 ; encoding: [0xf0,0x72,0x0a,0x7e] v_ffbh_u32 v5, src_scc -// GFX11: encoding: [0xfd,0x72,0x0a,0x7e] +// GFX11: v_clz_i32_u32_e32 v5, src_scc ; encoding: [0xfd,0x72,0x0a,0x7e] v_ffbh_u32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x72,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_clz_i32_u32_e32 v255, 0xaf123456 ; encoding: [0xff,0x72,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_ffbl_b32 v5, v1 -// GFX11: encoding: [0x01,0x75,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, v1 ; encoding: [0x01,0x75,0x0a,0x7e] v_ffbl_b32 v5, v255 -// GFX11: encoding: [0xff,0x75,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, v255 ; encoding: [0xff,0x75,0x0a,0x7e] v_ffbl_b32 v5, s1 -// GFX11: encoding: [0x01,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, s1 ; encoding: [0x01,0x74,0x0a,0x7e] v_ffbl_b32 v5, s105 -// GFX11: encoding: [0x69,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, s105 ; encoding: [0x69,0x74,0x0a,0x7e] v_ffbl_b32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, vcc_lo ; encoding: [0x6a,0x74,0x0a,0x7e] v_ffbl_b32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, vcc_hi ; encoding: [0x6b,0x74,0x0a,0x7e] v_ffbl_b32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, ttmp15 ; encoding: [0x7b,0x74,0x0a,0x7e] v_ffbl_b32 v5, m0 -// GFX11: encoding: [0x7d,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, m0 ; encoding: [0x7d,0x74,0x0a,0x7e] v_ffbl_b32 v5, exec_lo -// GFX11: encoding: [0x7e,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, exec_lo ; encoding: [0x7e,0x74,0x0a,0x7e] v_ffbl_b32 v5, exec_hi -// GFX11: encoding: [0x7f,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, exec_hi ; encoding: [0x7f,0x74,0x0a,0x7e] v_ffbl_b32 v5, null -// GFX11: encoding: [0x7c,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, null ; encoding: [0x7c,0x74,0x0a,0x7e] v_ffbl_b32 v5, -1 -// GFX11: encoding: [0xc1,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, -1 ; encoding: [0xc1,0x74,0x0a,0x7e] v_ffbl_b32 v5, 0.5 -// GFX11: encoding: [0xf0,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, 0.5 ; encoding: [0xf0,0x74,0x0a,0x7e] v_ffbl_b32 v5, src_scc -// GFX11: encoding: [0xfd,0x74,0x0a,0x7e] +// GFX11: v_ctz_i32_b32_e32 v5, src_scc ; encoding: [0xfd,0x74,0x0a,0x7e] v_ffbl_b32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x74,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_ctz_i32_b32_e32 v255, 0xaf123456 ; encoding: [0xff,0x74,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_floor_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xb7,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, v1.l ; encoding: [0x01,0xb7,0x0a,0x7e] v_floor_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xb7,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xb7,0x0a,0x7e] v_floor_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xb7,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, v1.h ; encoding: [0x81,0xb7,0x0a,0x7e] v_floor_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xb7,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, v127.h ; encoding: [0xff,0xb7,0x0a,0x7e] v_floor_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, s1 ; encoding: [0x01,0xb6,0x0a,0x7e] v_floor_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, s105 ; encoding: [0x69,0xb6,0x0a,0x7e] v_floor_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xb6,0x0a,0x7e] v_floor_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xb6,0x0a,0x7e] v_floor_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xb6,0x0a,0x7e] v_floor_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, m0 ; encoding: [0x7d,0xb6,0x0a,0x7e] v_floor_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xb6,0x0a,0x7e] v_floor_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xb6,0x0a,0x7e] v_floor_f16 v5.l, null -// GFX11: encoding: [0x7c,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, null ; encoding: [0x7c,0xb6,0x0a,0x7e] v_floor_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xb6,0x0a,0x7e] +// GFX11: v_floor_f16_e32 v5.l, -1 ; encoding: [0xc1,0xb6,0x0a,0x7e] v_floor_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xb6,0xfe,0x7e] +// GFX11: v_floor_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xb6,0xfe,0x7e] v_floor_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xb6,0x0a,0x7f] +// GFX11: v_floor_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xb6,0x0a,0x7f] v_floor_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xb6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_floor_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xb6,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_floor_f32 v5, v1 -// GFX11: encoding: [0x01,0x49,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, v1 ; encoding: [0x01,0x49,0x0a,0x7e] v_floor_f32 v5, v255 -// GFX11: encoding: [0xff,0x49,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, v255 ; encoding: [0xff,0x49,0x0a,0x7e] v_floor_f32 v5, s1 -// GFX11: encoding: [0x01,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, s1 ; encoding: [0x01,0x48,0x0a,0x7e] v_floor_f32 v5, s105 -// GFX11: encoding: [0x69,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, s105 ; encoding: [0x69,0x48,0x0a,0x7e] v_floor_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x48,0x0a,0x7e] v_floor_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x48,0x0a,0x7e] v_floor_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x48,0x0a,0x7e] v_floor_f32 v5, m0 -// GFX11: encoding: [0x7d,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, m0 ; encoding: [0x7d,0x48,0x0a,0x7e] v_floor_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, exec_lo ; encoding: [0x7e,0x48,0x0a,0x7e] v_floor_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, exec_hi ; encoding: [0x7f,0x48,0x0a,0x7e] v_floor_f32 v5, null -// GFX11: encoding: [0x7c,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, null ; encoding: [0x7c,0x48,0x0a,0x7e] v_floor_f32 v5, -1 -// GFX11: encoding: [0xc1,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, -1 ; encoding: [0xc1,0x48,0x0a,0x7e] v_floor_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, 0.5 ; encoding: [0xf0,0x48,0x0a,0x7e] v_floor_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x48,0x0a,0x7e] +// GFX11: v_floor_f32_e32 v5, src_scc ; encoding: [0xfd,0x48,0x0a,0x7e] v_floor_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x48,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_floor_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x48,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_floor_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x35,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x35,0x0a,0x7e] v_floor_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x35,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x35,0x0a,0x7e] v_floor_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x34,0x0a,0x7e] v_floor_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x34,0x0a,0x7e] v_floor_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x34,0x0a,0x7e] v_floor_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x34,0x0a,0x7e] v_floor_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], exec ; encoding: [0x7e,0x34,0x0a,0x7e] v_floor_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], null ; encoding: [0x7c,0x34,0x0a,0x7e] v_floor_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x34,0x0a,0x7e] v_floor_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x34,0x0a,0x7e] v_floor_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x34,0x0a,0x7e] +// GFX11: v_floor_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x34,0x0a,0x7e] v_floor_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x34,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_floor_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x34,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_fract_f16 v5, v1 -// GFX11: encoding: [0x01,0xbf,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, v1 ; encoding: [0x01,0xbf,0x0a,0x7e] v_fract_f16 v5, v127 -// GFX11: encoding: [0x7f,0xbf,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, v127 ; encoding: [0x7f,0xbf,0x0a,0x7e] v_fract_f16 v5, s1 -// GFX11: encoding: [0x01,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, s1 ; encoding: [0x01,0xbe,0x0a,0x7e] v_fract_f16 v5, s105 -// GFX11: encoding: [0x69,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, s105 ; encoding: [0x69,0xbe,0x0a,0x7e] v_fract_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, vcc_lo ; encoding: [0x6a,0xbe,0x0a,0x7e] v_fract_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, vcc_hi ; encoding: [0x6b,0xbe,0x0a,0x7e] v_fract_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, ttmp15 ; encoding: [0x7b,0xbe,0x0a,0x7e] v_fract_f16 v5, m0 -// GFX11: encoding: [0x7d,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, m0 ; encoding: [0x7d,0xbe,0x0a,0x7e] v_fract_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, exec_lo ; encoding: [0x7e,0xbe,0x0a,0x7e] v_fract_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, exec_hi ; encoding: [0x7f,0xbe,0x0a,0x7e] v_fract_f16 v5, null -// GFX11: encoding: [0x7c,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, null ; encoding: [0x7c,0xbe,0x0a,0x7e] v_fract_f16 v5, -1 -// GFX11: encoding: [0xc1,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, -1 ; encoding: [0xc1,0xbe,0x0a,0x7e] v_fract_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, 0.5 ; encoding: [0xf0,0xbe,0x0a,0x7e] v_fract_f16 v5, src_scc -// GFX11: encoding: [0xfd,0xbe,0x0a,0x7e] +// GFX11: v_fract_f16_e32 v5, src_scc ; encoding: [0xfd,0xbe,0x0a,0x7e] v_fract_f16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xbe,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_fract_f16_e32 v127, 0xfe0b ; encoding: [0xff,0xbe,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_fract_f32 v5, v1 -// GFX11: encoding: [0x01,0x41,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, v1 ; encoding: [0x01,0x41,0x0a,0x7e] v_fract_f32 v5, v255 -// GFX11: encoding: [0xff,0x41,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, v255 ; encoding: [0xff,0x41,0x0a,0x7e] v_fract_f32 v5, s1 -// GFX11: encoding: [0x01,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, s1 ; encoding: [0x01,0x40,0x0a,0x7e] v_fract_f32 v5, s105 -// GFX11: encoding: [0x69,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, s105 ; encoding: [0x69,0x40,0x0a,0x7e] v_fract_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x40,0x0a,0x7e] v_fract_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x40,0x0a,0x7e] v_fract_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x40,0x0a,0x7e] v_fract_f32 v5, m0 -// GFX11: encoding: [0x7d,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, m0 ; encoding: [0x7d,0x40,0x0a,0x7e] v_fract_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, exec_lo ; encoding: [0x7e,0x40,0x0a,0x7e] v_fract_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, exec_hi ; encoding: [0x7f,0x40,0x0a,0x7e] v_fract_f32 v5, null -// GFX11: encoding: [0x7c,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, null ; encoding: [0x7c,0x40,0x0a,0x7e] v_fract_f32 v5, -1 -// GFX11: encoding: [0xc1,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, -1 ; encoding: [0xc1,0x40,0x0a,0x7e] v_fract_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, 0.5 ; encoding: [0xf0,0x40,0x0a,0x7e] v_fract_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x40,0x0a,0x7e] +// GFX11: v_fract_f32_e32 v5, src_scc ; encoding: [0xfd,0x40,0x0a,0x7e] v_fract_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x40,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_fract_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x40,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_fract_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x7d,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x7d,0x0a,0x7e] v_fract_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x7d,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x7d,0x0a,0x7e] v_fract_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], exec ; encoding: [0x7e,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], null ; encoding: [0x7c,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x7c,0x0a,0x7e] v_fract_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x7c,0x0a,0x7e] +// GFX11: v_fract_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x7c,0x0a,0x7e] v_fract_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x7c,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_fract_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x7c,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_frexp_exp_i16_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xb5,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, v1.l ; encoding: [0x01,0xb5,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xb5,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xb5,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xb5,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, v1.h ; encoding: [0x81,0xb5,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xb5,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, v127.h ; encoding: [0xff,0xb5,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, s1 ; encoding: [0x01,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, s105 ; encoding: [0x69,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, m0 ; encoding: [0x7d,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, null -// GFX11: encoding: [0x7c,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, null ; encoding: [0x7c,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xb4,0x0a,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v5.l, -1 ; encoding: [0xc1,0xb4,0x0a,0x7e] v_frexp_exp_i16_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xb4,0xfe,0x7e] +// GFX11: v_frexp_exp_i16_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xb4,0xfe,0x7e] v_frexp_exp_i16_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xb4,0x0a,0x7f] +// GFX11: v_frexp_exp_i16_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xb4,0x0a,0x7f] v_frexp_exp_i16_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xb4,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xb4,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_frexp_exp_i32_f32 v5, v1 -// GFX11: encoding: [0x01,0x7f,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, v1 ; encoding: [0x01,0x7f,0x0a,0x7e] v_frexp_exp_i32_f32 v5, v255 -// GFX11: encoding: [0xff,0x7f,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, v255 ; encoding: [0xff,0x7f,0x0a,0x7e] v_frexp_exp_i32_f32 v5, s1 -// GFX11: encoding: [0x01,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, s1 ; encoding: [0x01,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, s105 -// GFX11: encoding: [0x69,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, s105 ; encoding: [0x69,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, m0 -// GFX11: encoding: [0x7d,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, m0 ; encoding: [0x7d,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, exec_lo ; encoding: [0x7e,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, exec_hi ; encoding: [0x7f,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, null -// GFX11: encoding: [0x7c,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, null ; encoding: [0x7c,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, -1 -// GFX11: encoding: [0xc1,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, -1 ; encoding: [0xc1,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, 0.5 ; encoding: [0xf0,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x7e,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f32_e32 v5, src_scc ; encoding: [0xfd,0x7e,0x0a,0x7e] v_frexp_exp_i32_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x7e,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_exp_i32_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x7e,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_frexp_exp_i32_f64 v5, v[1:2] -// GFX11: encoding: [0x01,0x79,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, v[1:2] ; encoding: [0x01,0x79,0x0a,0x7e] v_frexp_exp_i32_f64 v5, v[254:255] -// GFX11: encoding: [0xfe,0x79,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, v[254:255] ; encoding: [0xfe,0x79,0x0a,0x7e] v_frexp_exp_i32_f64 v5, s[2:3] -// GFX11: encoding: [0x02,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, s[2:3] ; encoding: [0x02,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, s[104:105] -// GFX11: encoding: [0x68,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, s[104:105] ; encoding: [0x68,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, vcc -// GFX11: encoding: [0x6a,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, vcc ; encoding: [0x6a,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, ttmp[14:15] -// GFX11: encoding: [0x7a,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, ttmp[14:15] ; encoding: [0x7a,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, exec -// GFX11: encoding: [0x7e,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, exec ; encoding: [0x7e,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, null -// GFX11: encoding: [0x7c,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, null ; encoding: [0x7c,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, -1 -// GFX11: encoding: [0xc1,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, -1 ; encoding: [0xc1,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, 0.5 -// GFX11: encoding: [0xf0,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, 0.5 ; encoding: [0xf0,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v5, src_scc -// GFX11: encoding: [0xfd,0x78,0x0a,0x7e] +// GFX11: v_frexp_exp_i32_f64_e32 v5, src_scc ; encoding: [0xfd,0x78,0x0a,0x7e] v_frexp_exp_i32_f64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x78,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_exp_i32_f64_e32 v255, 0xaf123456 ; encoding: [0xff,0x78,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_frexp_mant_f16 v5, v1 -// GFX11: encoding: [0x01,0xb3,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, v1 ; encoding: [0x01,0xb3,0x0a,0x7e] v_frexp_mant_f16 v5, v127 -// GFX11: encoding: [0x7f,0xb3,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, v127 ; encoding: [0x7f,0xb3,0x0a,0x7e] v_frexp_mant_f16 v5, s1 -// GFX11: encoding: [0x01,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, s1 ; encoding: [0x01,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, s105 -// GFX11: encoding: [0x69,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, s105 ; encoding: [0x69,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, vcc_lo ; encoding: [0x6a,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, vcc_hi ; encoding: [0x6b,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, ttmp15 ; encoding: [0x7b,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, m0 -// GFX11: encoding: [0x7d,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, m0 ; encoding: [0x7d,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, exec_lo ; encoding: [0x7e,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, exec_hi ; encoding: [0x7f,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, null -// GFX11: encoding: [0x7c,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, null ; encoding: [0x7c,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, -1 -// GFX11: encoding: [0xc1,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, -1 ; encoding: [0xc1,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, 0.5 ; encoding: [0xf0,0xb2,0x0a,0x7e] v_frexp_mant_f16 v5, src_scc -// GFX11: encoding: [0xfd,0xb2,0x0a,0x7e] +// GFX11: v_frexp_mant_f16_e32 v5, src_scc ; encoding: [0xfd,0xb2,0x0a,0x7e] v_frexp_mant_f16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xb2,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_frexp_mant_f16_e32 v127, 0xfe0b ; encoding: [0xff,0xb2,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_frexp_mant_f32 v5, v1 -// GFX11: encoding: [0x01,0x81,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, v1 ; encoding: [0x01,0x81,0x0a,0x7e] v_frexp_mant_f32 v5, v255 -// GFX11: encoding: [0xff,0x81,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, v255 ; encoding: [0xff,0x81,0x0a,0x7e] v_frexp_mant_f32 v5, s1 -// GFX11: encoding: [0x01,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, s1 ; encoding: [0x01,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, s105 -// GFX11: encoding: [0x69,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, s105 ; encoding: [0x69,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, m0 -// GFX11: encoding: [0x7d,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, m0 ; encoding: [0x7d,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, exec_lo ; encoding: [0x7e,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, exec_hi ; encoding: [0x7f,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, null -// GFX11: encoding: [0x7c,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, null ; encoding: [0x7c,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, -1 -// GFX11: encoding: [0xc1,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, -1 ; encoding: [0xc1,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, 0.5 ; encoding: [0xf0,0x80,0x0a,0x7e] v_frexp_mant_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x80,0x0a,0x7e] +// GFX11: v_frexp_mant_f32_e32 v5, src_scc ; encoding: [0xfd,0x80,0x0a,0x7e] v_frexp_mant_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x80,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_mant_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x80,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_frexp_mant_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x7b,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x7b,0x0a,0x7e] v_frexp_mant_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x7b,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x7b,0x0a,0x7e] v_frexp_mant_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], exec ; encoding: [0x7e,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], null ; encoding: [0x7c,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x7a,0x0a,0x7e] +// GFX11: v_frexp_mant_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x7a,0x0a,0x7e] v_frexp_mant_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x7a,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_mant_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x7a,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_log_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xaf,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, v1.l ; encoding: [0x01,0xaf,0x0a,0x7e] v_log_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xaf,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xaf,0x0a,0x7e] v_log_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xaf,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, v1.h ; encoding: [0x81,0xaf,0x0a,0x7e] v_log_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xaf,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, v127.h ; encoding: [0xff,0xaf,0x0a,0x7e] v_log_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, s1 ; encoding: [0x01,0xae,0x0a,0x7e] v_log_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, s105 ; encoding: [0x69,0xae,0x0a,0x7e] v_log_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xae,0x0a,0x7e] v_log_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xae,0x0a,0x7e] v_log_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xae,0x0a,0x7e] v_log_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, m0 ; encoding: [0x7d,0xae,0x0a,0x7e] v_log_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xae,0x0a,0x7e] v_log_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xae,0x0a,0x7e] v_log_f16 v5.l, null -// GFX11: encoding: [0x7c,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, null ; encoding: [0x7c,0xae,0x0a,0x7e] v_log_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xae,0x0a,0x7e] +// GFX11: v_log_f16_e32 v5.l, -1 ; encoding: [0xc1,0xae,0x0a,0x7e] v_log_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xae,0xfe,0x7e] +// GFX11: v_log_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xae,0xfe,0x7e] v_log_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xae,0x0a,0x7f] +// GFX11: v_log_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xae,0x0a,0x7f] v_log_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xae,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_log_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xae,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_log_f32 v5, v1 -// GFX11: encoding: [0x01,0x4f,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, v1 ; encoding: [0x01,0x4f,0x0a,0x7e] v_log_f32 v5, v255 -// GFX11: encoding: [0xff,0x4f,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, v255 ; encoding: [0xff,0x4f,0x0a,0x7e] v_log_f32 v5, s1 -// GFX11: encoding: [0x01,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, s1 ; encoding: [0x01,0x4e,0x0a,0x7e] v_log_f32 v5, s105 -// GFX11: encoding: [0x69,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, s105 ; encoding: [0x69,0x4e,0x0a,0x7e] v_log_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x4e,0x0a,0x7e] v_log_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x4e,0x0a,0x7e] v_log_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x4e,0x0a,0x7e] v_log_f32 v5, m0 -// GFX11: encoding: [0x7d,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, m0 ; encoding: [0x7d,0x4e,0x0a,0x7e] v_log_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, exec_lo ; encoding: [0x7e,0x4e,0x0a,0x7e] v_log_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, exec_hi ; encoding: [0x7f,0x4e,0x0a,0x7e] v_log_f32 v5, null -// GFX11: encoding: [0x7c,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, null ; encoding: [0x7c,0x4e,0x0a,0x7e] v_log_f32 v5, -1 -// GFX11: encoding: [0xc1,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, -1 ; encoding: [0xc1,0x4e,0x0a,0x7e] v_log_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, 0.5 ; encoding: [0xf0,0x4e,0x0a,0x7e] v_log_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x4e,0x0a,0x7e] +// GFX11: v_log_f32_e32 v5, src_scc ; encoding: [0xfd,0x4e,0x0a,0x7e] v_log_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x4e,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_log_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x4e,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_mov_b32 v5, v1 -// GFX11: encoding: [0x01,0x03,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, v1 ; encoding: [0x01,0x03,0x0a,0x7e] v_mov_b32 v5, v255 -// GFX11: encoding: [0xff,0x03,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, v255 ; encoding: [0xff,0x03,0x0a,0x7e] v_mov_b32 v5, s1 -// GFX11: encoding: [0x01,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, s1 ; encoding: [0x01,0x02,0x0a,0x7e] v_mov_b32 v5, s105 -// GFX11: encoding: [0x69,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, s105 ; encoding: [0x69,0x02,0x0a,0x7e] v_mov_b32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, vcc_lo ; encoding: [0x6a,0x02,0x0a,0x7e] v_mov_b32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, vcc_hi ; encoding: [0x6b,0x02,0x0a,0x7e] v_mov_b32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, ttmp15 ; encoding: [0x7b,0x02,0x0a,0x7e] v_mov_b32 v5, m0 -// GFX11: encoding: [0x7d,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, m0 ; encoding: [0x7d,0x02,0x0a,0x7e] v_mov_b32 v5, exec_lo -// GFX11: encoding: [0x7e,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, exec_lo ; encoding: [0x7e,0x02,0x0a,0x7e] v_mov_b32 v5, exec_hi -// GFX11: encoding: [0x7f,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, exec_hi ; encoding: [0x7f,0x02,0x0a,0x7e] v_mov_b32 v5, null -// GFX11: encoding: [0x7c,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, null ; encoding: [0x7c,0x02,0x0a,0x7e] v_mov_b32 v5, -1 -// GFX11: encoding: [0xc1,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, -1 ; encoding: [0xc1,0x02,0x0a,0x7e] v_mov_b32 v5, 0.5 -// GFX11: encoding: [0xf0,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, 0.5 ; encoding: [0xf0,0x02,0x0a,0x7e] v_mov_b32 v5, src_scc -// GFX11: encoding: [0xfd,0x02,0x0a,0x7e] +// GFX11: v_mov_b32_e32 v5, src_scc ; encoding: [0xfd,0x02,0x0a,0x7e] v_mov_b32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x02,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_mov_b32_e32 v255, 0xaf123456 ; encoding: [0xff,0x02,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_movreld_b32 v5, v1 -// GFX11: encoding: [0x01,0x85,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, v1 ; encoding: [0x01,0x85,0x0a,0x7e] v_movreld_b32 v5, v255 -// GFX11: encoding: [0xff,0x85,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, v255 ; encoding: [0xff,0x85,0x0a,0x7e] v_movreld_b32 v5, s1 -// GFX11: encoding: [0x01,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, s1 ; encoding: [0x01,0x84,0x0a,0x7e] v_movreld_b32 v5, s105 -// GFX11: encoding: [0x69,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, s105 ; encoding: [0x69,0x84,0x0a,0x7e] v_movreld_b32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, vcc_lo ; encoding: [0x6a,0x84,0x0a,0x7e] v_movreld_b32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, vcc_hi ; encoding: [0x6b,0x84,0x0a,0x7e] v_movreld_b32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, ttmp15 ; encoding: [0x7b,0x84,0x0a,0x7e] v_movreld_b32 v5, m0 -// GFX11: encoding: [0x7d,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, m0 ; encoding: [0x7d,0x84,0x0a,0x7e] v_movreld_b32 v5, exec_lo -// GFX11: encoding: [0x7e,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, exec_lo ; encoding: [0x7e,0x84,0x0a,0x7e] v_movreld_b32 v5, exec_hi -// GFX11: encoding: [0x7f,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, exec_hi ; encoding: [0x7f,0x84,0x0a,0x7e] v_movreld_b32 v5, null -// GFX11: encoding: [0x7c,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, null ; encoding: [0x7c,0x84,0x0a,0x7e] v_movreld_b32 v5, -1 -// GFX11: encoding: [0xc1,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, -1 ; encoding: [0xc1,0x84,0x0a,0x7e] v_movreld_b32 v5, 0.5 -// GFX11: encoding: [0xf0,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, 0.5 ; encoding: [0xf0,0x84,0x0a,0x7e] v_movreld_b32 v5, src_scc -// GFX11: encoding: [0xfd,0x84,0x0a,0x7e] +// GFX11: v_movreld_b32_e32 v5, src_scc ; encoding: [0xfd,0x84,0x0a,0x7e] v_movreld_b32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x84,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_movreld_b32_e32 v255, 0xaf123456 ; encoding: [0xff,0x84,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_movrels_b32 v5, v1 -// GFX11: encoding: [0x01,0x87,0x0a,0x7e] +// GFX11: v_movrels_b32_e32 v5, v1 ; encoding: [0x01,0x87,0x0a,0x7e] v_movrels_b32 v255, v255 -// GFX11: encoding: [0xff,0x87,0xfe,0x7f] +// GFX11: v_movrels_b32_e32 v255, v255 ; encoding: [0xff,0x87,0xfe,0x7f] v_movrelsd_2_b32 v5, v1 -// GFX11: encoding: [0x01,0x91,0x0a,0x7e] +// GFX11: v_movrelsd_2_b32_e32 v5, v1 ; encoding: [0x01,0x91,0x0a,0x7e] v_movrelsd_2_b32 v255, v255 -// GFX11: encoding: [0xff,0x91,0xfe,0x7f] +// GFX11: v_movrelsd_2_b32_e32 v255, v255 ; encoding: [0xff,0x91,0xfe,0x7f] v_movrelsd_b32 v5, v1 -// GFX11: encoding: [0x01,0x89,0x0a,0x7e] +// GFX11: v_movrelsd_b32_e32 v5, v1 ; encoding: [0x01,0x89,0x0a,0x7e] v_movrelsd_b32 v255, v255 -// GFX11: encoding: [0xff,0x89,0xfe,0x7f] +// GFX11: v_movrelsd_b32_e32 v255, v255 ; encoding: [0xff,0x89,0xfe,0x7f] v_nop -// GFX11: encoding: [0x00,0x00,0x00,0x7e] +// GFX11: v_nop ; encoding: [0x00,0x00,0x00,0x7e] v_not_b16 v5, v1 -// GFX11: encoding: [0x01,0xd3,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, v1 ; encoding: [0x01,0xd3,0x0a,0x7e] v_not_b16 v5, v127 -// GFX11: encoding: [0x7f,0xd3,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, v127 ; encoding: [0x7f,0xd3,0x0a,0x7e] v_not_b16 v5, s1 -// GFX11: encoding: [0x01,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, s1 ; encoding: [0x01,0xd2,0x0a,0x7e] v_not_b16 v5, s105 -// GFX11: encoding: [0x69,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, s105 ; encoding: [0x69,0xd2,0x0a,0x7e] v_not_b16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, vcc_lo ; encoding: [0x6a,0xd2,0x0a,0x7e] v_not_b16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, vcc_hi ; encoding: [0x6b,0xd2,0x0a,0x7e] v_not_b16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, ttmp15 ; encoding: [0x7b,0xd2,0x0a,0x7e] v_not_b16 v5, m0 -// GFX11: encoding: [0x7d,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, m0 ; encoding: [0x7d,0xd2,0x0a,0x7e] v_not_b16 v5, exec_lo -// GFX11: encoding: [0x7e,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, exec_lo ; encoding: [0x7e,0xd2,0x0a,0x7e] v_not_b16 v5, exec_hi -// GFX11: encoding: [0x7f,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, exec_hi ; encoding: [0x7f,0xd2,0x0a,0x7e] v_not_b16 v5, null -// GFX11: encoding: [0x7c,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, null ; encoding: [0x7c,0xd2,0x0a,0x7e] v_not_b16 v5, -1 -// GFX11: encoding: [0xc1,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, -1 ; encoding: [0xc1,0xd2,0x0a,0x7e] v_not_b16 v5, 0.5 -// GFX11: encoding: [0xf0,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, 0.5 ; encoding: [0xf0,0xd2,0x0a,0x7e] v_not_b16 v5, src_scc -// GFX11: encoding: [0xfd,0xd2,0x0a,0x7e] +// GFX11: v_not_b16_e32 v5, src_scc ; encoding: [0xfd,0xd2,0x0a,0x7e] v_not_b16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xd2,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_not_b16_e32 v127, 0xfe0b ; encoding: [0xff,0xd2,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_not_b32 v5, v1 -// GFX11: encoding: [0x01,0x6f,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, v1 ; encoding: [0x01,0x6f,0x0a,0x7e] v_not_b32 v5, v255 -// GFX11: encoding: [0xff,0x6f,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, v255 ; encoding: [0xff,0x6f,0x0a,0x7e] v_not_b32 v5, s1 -// GFX11: encoding: [0x01,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, s1 ; encoding: [0x01,0x6e,0x0a,0x7e] v_not_b32 v5, s105 -// GFX11: encoding: [0x69,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, s105 ; encoding: [0x69,0x6e,0x0a,0x7e] v_not_b32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, vcc_lo ; encoding: [0x6a,0x6e,0x0a,0x7e] v_not_b32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, vcc_hi ; encoding: [0x6b,0x6e,0x0a,0x7e] v_not_b32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, ttmp15 ; encoding: [0x7b,0x6e,0x0a,0x7e] v_not_b32 v5, m0 -// GFX11: encoding: [0x7d,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, m0 ; encoding: [0x7d,0x6e,0x0a,0x7e] v_not_b32 v5, exec_lo -// GFX11: encoding: [0x7e,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, exec_lo ; encoding: [0x7e,0x6e,0x0a,0x7e] v_not_b32 v5, exec_hi -// GFX11: encoding: [0x7f,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, exec_hi ; encoding: [0x7f,0x6e,0x0a,0x7e] v_not_b32 v5, null -// GFX11: encoding: [0x7c,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, null ; encoding: [0x7c,0x6e,0x0a,0x7e] v_not_b32 v5, -1 -// GFX11: encoding: [0xc1,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, -1 ; encoding: [0xc1,0x6e,0x0a,0x7e] v_not_b32 v5, 0.5 -// GFX11: encoding: [0xf0,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, 0.5 ; encoding: [0xf0,0x6e,0x0a,0x7e] v_not_b32 v5, src_scc -// GFX11: encoding: [0xfd,0x6e,0x0a,0x7e] +// GFX11: v_not_b32_e32 v5, src_scc ; encoding: [0xfd,0x6e,0x0a,0x7e] v_not_b32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x6e,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_not_b32_e32 v255, 0xaf123456 ; encoding: [0xff,0x6e,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_permlane64_b32 v5, v1 -// GFX11: encoding: [0x01,0xcf,0x0a,0x7e] +// GFX11: v_permlane64_b32 v5, v1 ; encoding: [0x01,0xcf,0x0a,0x7e] v_permlane64_b32 v255, v255 -// GFX11: encoding: [0xff,0xcf,0xfe,0x7f] +// GFX11: v_permlane64_b32 v255, v255 ; encoding: [0xff,0xcf,0xfe,0x7f] v_pipeflush -// GFX11: encoding: [0x00,0x36,0x00,0x7e] +// GFX11: v_pipeflush ; encoding: [0x00,0x36,0x00,0x7e] v_rcp_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xa9,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, v1.l ; encoding: [0x01,0xa9,0x0a,0x7e] v_rcp_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xa9,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xa9,0x0a,0x7e] v_rcp_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xa9,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, v1.h ; encoding: [0x81,0xa9,0x0a,0x7e] v_rcp_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xa9,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, v127.h ; encoding: [0xff,0xa9,0x0a,0x7e] v_rcp_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, s1 ; encoding: [0x01,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, s105 ; encoding: [0x69,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, m0 ; encoding: [0x7d,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, null -// GFX11: encoding: [0x7c,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, null ; encoding: [0x7c,0xa8,0x0a,0x7e] v_rcp_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xa8,0x0a,0x7e] +// GFX11: v_rcp_f16_e32 v5.l, -1 ; encoding: [0xc1,0xa8,0x0a,0x7e] v_rcp_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xa8,0xfe,0x7e] +// GFX11: v_rcp_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xa8,0xfe,0x7e] v_rcp_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xa8,0x0a,0x7f] +// GFX11: v_rcp_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xa8,0x0a,0x7f] v_rcp_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xa8,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_rcp_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xa8,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_rcp_f32 v5, v1 -// GFX11: encoding: [0x01,0x55,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, v1 ; encoding: [0x01,0x55,0x0a,0x7e] v_rcp_f32 v5, v255 -// GFX11: encoding: [0xff,0x55,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, v255 ; encoding: [0xff,0x55,0x0a,0x7e] v_rcp_f32 v5, s1 -// GFX11: encoding: [0x01,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, s1 ; encoding: [0x01,0x54,0x0a,0x7e] v_rcp_f32 v5, s105 -// GFX11: encoding: [0x69,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, s105 ; encoding: [0x69,0x54,0x0a,0x7e] v_rcp_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x54,0x0a,0x7e] v_rcp_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x54,0x0a,0x7e] v_rcp_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x54,0x0a,0x7e] v_rcp_f32 v5, m0 -// GFX11: encoding: [0x7d,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, m0 ; encoding: [0x7d,0x54,0x0a,0x7e] v_rcp_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, exec_lo ; encoding: [0x7e,0x54,0x0a,0x7e] v_rcp_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, exec_hi ; encoding: [0x7f,0x54,0x0a,0x7e] v_rcp_f32 v5, null -// GFX11: encoding: [0x7c,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, null ; encoding: [0x7c,0x54,0x0a,0x7e] v_rcp_f32 v5, -1 -// GFX11: encoding: [0xc1,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, -1 ; encoding: [0xc1,0x54,0x0a,0x7e] v_rcp_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, 0.5 ; encoding: [0xf0,0x54,0x0a,0x7e] v_rcp_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x54,0x0a,0x7e] +// GFX11: v_rcp_f32_e32 v5, src_scc ; encoding: [0xfd,0x54,0x0a,0x7e] v_rcp_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x54,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rcp_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x54,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_rcp_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x5f,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x5f,0x0a,0x7e] v_rcp_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x5f,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x5f,0x0a,0x7e] v_rcp_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], exec ; encoding: [0x7e,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], null ; encoding: [0x7c,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x5e,0x0a,0x7e] v_rcp_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x5e,0x0a,0x7e] +// GFX11: v_rcp_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x5e,0x0a,0x7e] v_rcp_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x5e,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rcp_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x5e,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_rcp_iflag_f32 v5, v1 -// GFX11: encoding: [0x01,0x57,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, v1 ; encoding: [0x01,0x57,0x0a,0x7e] v_rcp_iflag_f32 v5, v255 -// GFX11: encoding: [0xff,0x57,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, v255 ; encoding: [0xff,0x57,0x0a,0x7e] v_rcp_iflag_f32 v5, s1 -// GFX11: encoding: [0x01,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, s1 ; encoding: [0x01,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, s105 -// GFX11: encoding: [0x69,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, s105 ; encoding: [0x69,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, m0 -// GFX11: encoding: [0x7d,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, m0 ; encoding: [0x7d,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, exec_lo ; encoding: [0x7e,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, exec_hi ; encoding: [0x7f,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, null -// GFX11: encoding: [0x7c,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, null ; encoding: [0x7c,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, -1 -// GFX11: encoding: [0xc1,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, -1 ; encoding: [0xc1,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, 0.5 ; encoding: [0xf0,0x56,0x0a,0x7e] v_rcp_iflag_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x56,0x0a,0x7e] +// GFX11: v_rcp_iflag_f32_e32 v5, src_scc ; encoding: [0xfd,0x56,0x0a,0x7e] v_rcp_iflag_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x56,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rcp_iflag_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x56,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_readfirstlane_b32 s5, v1 -// GFX11: encoding: [0x01,0x05,0x0a,0x7e] +// GFX11: v_readfirstlane_b32 s5, v1 ; encoding: [0x01,0x05,0x0a,0x7e] v_readfirstlane_b32 s105, v1 -// GFX11: encoding: [0x01,0x05,0xd2,0x7e] +// GFX11: v_readfirstlane_b32 s105, v1 ; encoding: [0x01,0x05,0xd2,0x7e] v_readfirstlane_b32 vcc_lo, v1 -// GFX11: encoding: [0x01,0x05,0xd4,0x7e] +// GFX11: v_readfirstlane_b32 vcc_lo, v1 ; encoding: [0x01,0x05,0xd4,0x7e] v_readfirstlane_b32 vcc_hi, v1 -// GFX11: encoding: [0x01,0x05,0xd6,0x7e] +// GFX11: v_readfirstlane_b32 vcc_hi, v1 ; encoding: [0x01,0x05,0xd6,0x7e] v_readfirstlane_b32 ttmp15, v1 -// GFX11: encoding: [0x01,0x05,0xf6,0x7e] +// GFX11: v_readfirstlane_b32 ttmp15, v1 ; encoding: [0x01,0x05,0xf6,0x7e] v_readfirstlane_b32 null, v255 -// GFX11: encoding: [0xff,0x05,0xf8,0x7e] +// GFX11: v_readfirstlane_b32 null, v255 ; encoding: [0xff,0x05,0xf8,0x7e] v_rndne_f16 v5, v1 -// GFX11: encoding: [0x01,0xbd,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, v1 ; encoding: [0x01,0xbd,0x0a,0x7e] v_rndne_f16 v5, v127 -// GFX11: encoding: [0x7f,0xbd,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, v127 ; encoding: [0x7f,0xbd,0x0a,0x7e] v_rndne_f16 v5, s1 -// GFX11: encoding: [0x01,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, s1 ; encoding: [0x01,0xbc,0x0a,0x7e] v_rndne_f16 v5, s105 -// GFX11: encoding: [0x69,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, s105 ; encoding: [0x69,0xbc,0x0a,0x7e] v_rndne_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, vcc_lo ; encoding: [0x6a,0xbc,0x0a,0x7e] v_rndne_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, vcc_hi ; encoding: [0x6b,0xbc,0x0a,0x7e] v_rndne_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, ttmp15 ; encoding: [0x7b,0xbc,0x0a,0x7e] v_rndne_f16 v5, m0 -// GFX11: encoding: [0x7d,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, m0 ; encoding: [0x7d,0xbc,0x0a,0x7e] v_rndne_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, exec_lo ; encoding: [0x7e,0xbc,0x0a,0x7e] v_rndne_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, exec_hi ; encoding: [0x7f,0xbc,0x0a,0x7e] v_rndne_f16 v5, null -// GFX11: encoding: [0x7c,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, null ; encoding: [0x7c,0xbc,0x0a,0x7e] v_rndne_f16 v5, -1 -// GFX11: encoding: [0xc1,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, -1 ; encoding: [0xc1,0xbc,0x0a,0x7e] v_rndne_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, 0.5 ; encoding: [0xf0,0xbc,0x0a,0x7e] v_rndne_f16 v5, src_scc -// GFX11: encoding: [0xfd,0xbc,0x0a,0x7e] +// GFX11: v_rndne_f16_e32 v5, src_scc ; encoding: [0xfd,0xbc,0x0a,0x7e] v_rndne_f16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xbc,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_rndne_f16_e32 v127, 0xfe0b ; encoding: [0xff,0xbc,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_rndne_f32 v5, v1 -// GFX11: encoding: [0x01,0x47,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, v1 ; encoding: [0x01,0x47,0x0a,0x7e] v_rndne_f32 v5, v255 -// GFX11: encoding: [0xff,0x47,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, v255 ; encoding: [0xff,0x47,0x0a,0x7e] v_rndne_f32 v5, s1 -// GFX11: encoding: [0x01,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, s1 ; encoding: [0x01,0x46,0x0a,0x7e] v_rndne_f32 v5, s105 -// GFX11: encoding: [0x69,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, s105 ; encoding: [0x69,0x46,0x0a,0x7e] v_rndne_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x46,0x0a,0x7e] v_rndne_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x46,0x0a,0x7e] v_rndne_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x46,0x0a,0x7e] v_rndne_f32 v5, m0 -// GFX11: encoding: [0x7d,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, m0 ; encoding: [0x7d,0x46,0x0a,0x7e] v_rndne_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, exec_lo ; encoding: [0x7e,0x46,0x0a,0x7e] v_rndne_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, exec_hi ; encoding: [0x7f,0x46,0x0a,0x7e] v_rndne_f32 v5, null -// GFX11: encoding: [0x7c,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, null ; encoding: [0x7c,0x46,0x0a,0x7e] v_rndne_f32 v5, -1 -// GFX11: encoding: [0xc1,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, -1 ; encoding: [0xc1,0x46,0x0a,0x7e] v_rndne_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, 0.5 ; encoding: [0xf0,0x46,0x0a,0x7e] v_rndne_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x46,0x0a,0x7e] +// GFX11: v_rndne_f32_e32 v5, src_scc ; encoding: [0xfd,0x46,0x0a,0x7e] v_rndne_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x46,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rndne_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x46,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_rndne_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x33,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x33,0x0a,0x7e] v_rndne_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x33,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x33,0x0a,0x7e] v_rndne_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], exec ; encoding: [0x7e,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], null ; encoding: [0x7c,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x32,0x0a,0x7e] v_rndne_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x32,0x0a,0x7e] +// GFX11: v_rndne_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x32,0x0a,0x7e] v_rndne_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x32,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rndne_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x32,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_rsq_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xad,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, v1.l ; encoding: [0x01,0xad,0x0a,0x7e] v_rsq_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xad,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xad,0x0a,0x7e] v_rsq_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xad,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, v1.h ; encoding: [0x81,0xad,0x0a,0x7e] v_rsq_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xad,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, v127.h ; encoding: [0xff,0xad,0x0a,0x7e] v_rsq_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, s1 ; encoding: [0x01,0xac,0x0a,0x7e] v_rsq_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, s105 ; encoding: [0x69,0xac,0x0a,0x7e] v_rsq_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xac,0x0a,0x7e] v_rsq_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xac,0x0a,0x7e] v_rsq_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xac,0x0a,0x7e] v_rsq_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, m0 ; encoding: [0x7d,0xac,0x0a,0x7e] v_rsq_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xac,0x0a,0x7e] v_rsq_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xac,0x0a,0x7e] v_rsq_f16 v5.l, null -// GFX11: encoding: [0x7c,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, null ; encoding: [0x7c,0xac,0x0a,0x7e] v_rsq_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xac,0x0a,0x7e] +// GFX11: v_rsq_f16_e32 v5.l, -1 ; encoding: [0xc1,0xac,0x0a,0x7e] v_rsq_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xac,0xfe,0x7e] +// GFX11: v_rsq_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xac,0xfe,0x7e] v_rsq_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xac,0x0a,0x7f] +// GFX11: v_rsq_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xac,0x0a,0x7f] v_rsq_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xac,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_rsq_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xac,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_rsq_f32 v5, v1 -// GFX11: encoding: [0x01,0x5d,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, v1 ; encoding: [0x01,0x5d,0x0a,0x7e] v_rsq_f32 v5, v255 -// GFX11: encoding: [0xff,0x5d,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, v255 ; encoding: [0xff,0x5d,0x0a,0x7e] v_rsq_f32 v5, s1 -// GFX11: encoding: [0x01,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, s1 ; encoding: [0x01,0x5c,0x0a,0x7e] v_rsq_f32 v5, s105 -// GFX11: encoding: [0x69,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, s105 ; encoding: [0x69,0x5c,0x0a,0x7e] v_rsq_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x5c,0x0a,0x7e] v_rsq_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x5c,0x0a,0x7e] v_rsq_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x5c,0x0a,0x7e] v_rsq_f32 v5, m0 -// GFX11: encoding: [0x7d,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, m0 ; encoding: [0x7d,0x5c,0x0a,0x7e] v_rsq_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, exec_lo ; encoding: [0x7e,0x5c,0x0a,0x7e] v_rsq_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, exec_hi ; encoding: [0x7f,0x5c,0x0a,0x7e] v_rsq_f32 v5, null -// GFX11: encoding: [0x7c,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, null ; encoding: [0x7c,0x5c,0x0a,0x7e] v_rsq_f32 v5, -1 -// GFX11: encoding: [0xc1,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, -1 ; encoding: [0xc1,0x5c,0x0a,0x7e] v_rsq_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, 0.5 ; encoding: [0xf0,0x5c,0x0a,0x7e] v_rsq_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x5c,0x0a,0x7e] +// GFX11: v_rsq_f32_e32 v5, src_scc ; encoding: [0xfd,0x5c,0x0a,0x7e] v_rsq_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x5c,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rsq_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x5c,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_rsq_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x63,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x63,0x0a,0x7e] v_rsq_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x63,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x63,0x0a,0x7e] v_rsq_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], exec ; encoding: [0x7e,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], null ; encoding: [0x7c,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x62,0x0a,0x7e] v_rsq_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x62,0x0a,0x7e] +// GFX11: v_rsq_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x62,0x0a,0x7e] v_rsq_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x62,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_rsq_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x62,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_sat_pk_u8_i16 v5, v1 -// GFX11: encoding: [0x01,0xc5,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, v1 ; encoding: [0x01,0xc5,0x0a,0x7e] v_sat_pk_u8_i16 v5, v255 -// GFX11: encoding: [0xff,0xc5,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, v255 ; encoding: [0xff,0xc5,0x0a,0x7e] v_sat_pk_u8_i16 v5, s1 -// GFX11: encoding: [0x01,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, s1 ; encoding: [0x01,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, s105 -// GFX11: encoding: [0x69,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, s105 ; encoding: [0x69,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, vcc_lo ; encoding: [0x6a,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, vcc_hi ; encoding: [0x6b,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, ttmp15 ; encoding: [0x7b,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, m0 -// GFX11: encoding: [0x7d,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, m0 ; encoding: [0x7d,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, exec_lo -// GFX11: encoding: [0x7e,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, exec_lo ; encoding: [0x7e,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, exec_hi -// GFX11: encoding: [0x7f,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, exec_hi ; encoding: [0x7f,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, null -// GFX11: encoding: [0x7c,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, null ; encoding: [0x7c,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, -1 -// GFX11: encoding: [0xc1,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, -1 ; encoding: [0xc1,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, 0.5 -// GFX11: encoding: [0xf0,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, 0.5 ; encoding: [0xf0,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v5, src_scc -// GFX11: encoding: [0xfd,0xc4,0x0a,0x7e] +// GFX11: v_sat_pk_u8_i16_e32 v5, src_scc ; encoding: [0xfd,0xc4,0x0a,0x7e] v_sat_pk_u8_i16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xc4,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e32 v127, 0xfe0b ; encoding: [0xff,0xc4,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_sin_f16 v5, v1 -// GFX11: encoding: [0x01,0xc1,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, v1 ; encoding: [0x01,0xc1,0x0a,0x7e] v_sin_f16 v5, v127 -// GFX11: encoding: [0x7f,0xc1,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, v127 ; encoding: [0x7f,0xc1,0x0a,0x7e] v_sin_f16 v5, s1 -// GFX11: encoding: [0x01,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, s1 ; encoding: [0x01,0xc0,0x0a,0x7e] v_sin_f16 v5, s105 -// GFX11: encoding: [0x69,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, s105 ; encoding: [0x69,0xc0,0x0a,0x7e] v_sin_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, vcc_lo ; encoding: [0x6a,0xc0,0x0a,0x7e] v_sin_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, vcc_hi ; encoding: [0x6b,0xc0,0x0a,0x7e] v_sin_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, ttmp15 ; encoding: [0x7b,0xc0,0x0a,0x7e] v_sin_f16 v5, m0 -// GFX11: encoding: [0x7d,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, m0 ; encoding: [0x7d,0xc0,0x0a,0x7e] v_sin_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, exec_lo ; encoding: [0x7e,0xc0,0x0a,0x7e] v_sin_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, exec_hi ; encoding: [0x7f,0xc0,0x0a,0x7e] v_sin_f16 v5, null -// GFX11: encoding: [0x7c,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, null ; encoding: [0x7c,0xc0,0x0a,0x7e] v_sin_f16 v5, -1 -// GFX11: encoding: [0xc1,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, -1 ; encoding: [0xc1,0xc0,0x0a,0x7e] v_sin_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, 0.5 ; encoding: [0xf0,0xc0,0x0a,0x7e] v_sin_f16 v5, src_scc -// GFX11: encoding: [0xfd,0xc0,0x0a,0x7e] +// GFX11: v_sin_f16_e32 v5, src_scc ; encoding: [0xfd,0xc0,0x0a,0x7e] v_sin_f16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xc0,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_sin_f16_e32 v127, 0xfe0b ; encoding: [0xff,0xc0,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_sin_f32 v5, v1 -// GFX11: encoding: [0x01,0x6b,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, v1 ; encoding: [0x01,0x6b,0x0a,0x7e] v_sin_f32 v5, v255 -// GFX11: encoding: [0xff,0x6b,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, v255 ; encoding: [0xff,0x6b,0x0a,0x7e] v_sin_f32 v5, s1 -// GFX11: encoding: [0x01,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, s1 ; encoding: [0x01,0x6a,0x0a,0x7e] v_sin_f32 v5, s105 -// GFX11: encoding: [0x69,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, s105 ; encoding: [0x69,0x6a,0x0a,0x7e] v_sin_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x6a,0x0a,0x7e] v_sin_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x6a,0x0a,0x7e] v_sin_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x6a,0x0a,0x7e] v_sin_f32 v5, m0 -// GFX11: encoding: [0x7d,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, m0 ; encoding: [0x7d,0x6a,0x0a,0x7e] v_sin_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, exec_lo ; encoding: [0x7e,0x6a,0x0a,0x7e] v_sin_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, exec_hi ; encoding: [0x7f,0x6a,0x0a,0x7e] v_sin_f32 v5, null -// GFX11: encoding: [0x7c,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, null ; encoding: [0x7c,0x6a,0x0a,0x7e] v_sin_f32 v5, -1 -// GFX11: encoding: [0xc1,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, -1 ; encoding: [0xc1,0x6a,0x0a,0x7e] v_sin_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, 0.5 ; encoding: [0xf0,0x6a,0x0a,0x7e] v_sin_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x6a,0x0a,0x7e] +// GFX11: v_sin_f32_e32 v5, src_scc ; encoding: [0xfd,0x6a,0x0a,0x7e] v_sin_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x6a,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_sin_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x6a,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_sqrt_f16 v5.l, v1.l -// GFX11: encoding: [0x01,0xab,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, v1.l ; encoding: [0x01,0xab,0x0a,0x7e] v_sqrt_f16 v5.l, v127.l -// GFX11: encoding: [0x7f,0xab,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, v127.l ; encoding: [0x7f,0xab,0x0a,0x7e] v_sqrt_f16 v5.l, v1.h -// GFX11: encoding: [0x81,0xab,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, v1.h ; encoding: [0x81,0xab,0x0a,0x7e] v_sqrt_f16 v5.l, v127.h -// GFX11: encoding: [0xff,0xab,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, v127.h ; encoding: [0xff,0xab,0x0a,0x7e] v_sqrt_f16 v5.l, s1 -// GFX11: encoding: [0x01,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, s1 ; encoding: [0x01,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, s105 -// GFX11: encoding: [0x69,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, s105 ; encoding: [0x69,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, vcc_lo -// GFX11: encoding: [0x6a,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, vcc_lo ; encoding: [0x6a,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, vcc_hi -// GFX11: encoding: [0x6b,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, vcc_hi ; encoding: [0x6b,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, ttmp15 -// GFX11: encoding: [0x7b,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, ttmp15 ; encoding: [0x7b,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, m0 -// GFX11: encoding: [0x7d,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, m0 ; encoding: [0x7d,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, exec_lo -// GFX11: encoding: [0x7e,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, exec_lo ; encoding: [0x7e,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, exec_hi -// GFX11: encoding: [0x7f,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, exec_hi ; encoding: [0x7f,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, null -// GFX11: encoding: [0x7c,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, null ; encoding: [0x7c,0xaa,0x0a,0x7e] v_sqrt_f16 v5.l, -1 -// GFX11: encoding: [0xc1,0xaa,0x0a,0x7e] +// GFX11: v_sqrt_f16_e32 v5.l, -1 ; encoding: [0xc1,0xaa,0x0a,0x7e] v_sqrt_f16 v127.l, 0.5 -// GFX11: encoding: [0xf0,0xaa,0xfe,0x7e] +// GFX11: v_sqrt_f16_e32 v127.l, 0.5 ; encoding: [0xf0,0xaa,0xfe,0x7e] v_sqrt_f16 v5.h, src_scc -// GFX11: encoding: [0xfd,0xaa,0x0a,0x7f] +// GFX11: v_sqrt_f16_e32 v5.h, src_scc ; encoding: [0xfd,0xaa,0x0a,0x7f] v_sqrt_f16 v127.h, 0xfe0b -// GFX11: encoding: [0xff,0xaa,0xfe,0x7f,0x0b,0xfe,0x00,0x00] +// GFX11: v_sqrt_f16_e32 v127.h, 0xfe0b ; encoding: [0xff,0xaa,0xfe,0x7f,0x0b,0xfe,0x00,0x00] v_sqrt_f32 v5, v1 -// GFX11: encoding: [0x01,0x67,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, v1 ; encoding: [0x01,0x67,0x0a,0x7e] v_sqrt_f32 v5, v255 -// GFX11: encoding: [0xff,0x67,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, v255 ; encoding: [0xff,0x67,0x0a,0x7e] v_sqrt_f32 v5, s1 -// GFX11: encoding: [0x01,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, s1 ; encoding: [0x01,0x66,0x0a,0x7e] v_sqrt_f32 v5, s105 -// GFX11: encoding: [0x69,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, s105 ; encoding: [0x69,0x66,0x0a,0x7e] v_sqrt_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x66,0x0a,0x7e] v_sqrt_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x66,0x0a,0x7e] v_sqrt_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x66,0x0a,0x7e] v_sqrt_f32 v5, m0 -// GFX11: encoding: [0x7d,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, m0 ; encoding: [0x7d,0x66,0x0a,0x7e] v_sqrt_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, exec_lo ; encoding: [0x7e,0x66,0x0a,0x7e] v_sqrt_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, exec_hi ; encoding: [0x7f,0x66,0x0a,0x7e] v_sqrt_f32 v5, null -// GFX11: encoding: [0x7c,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, null ; encoding: [0x7c,0x66,0x0a,0x7e] v_sqrt_f32 v5, -1 -// GFX11: encoding: [0xc1,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, -1 ; encoding: [0xc1,0x66,0x0a,0x7e] v_sqrt_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, 0.5 ; encoding: [0xf0,0x66,0x0a,0x7e] v_sqrt_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x66,0x0a,0x7e] +// GFX11: v_sqrt_f32_e32 v5, src_scc ; encoding: [0xfd,0x66,0x0a,0x7e] v_sqrt_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x66,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_sqrt_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x66,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_sqrt_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x69,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x69,0x0a,0x7e] v_sqrt_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x69,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x69,0x0a,0x7e] v_sqrt_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], exec ; encoding: [0x7e,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], null ; encoding: [0x7c,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x68,0x0a,0x7e] v_sqrt_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x68,0x0a,0x7e] +// GFX11: v_sqrt_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x68,0x0a,0x7e] v_sqrt_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x68,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_sqrt_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x68,0xfc,0x7f,0x56,0x34,0x12,0xaf] v_swap_b16 v5.l, v1.h -// GFX11: encoding: [0x81,0xcd,0x0a,0x7e] +// GFX11: v_swap_b16 v5.l, v1.h ; encoding: [0x81,0xcd,0x0a,0x7e] v_swap_b16 v5.h, v1.l -// GFX11: encoding: [0x01,0xcd,0x0a,0x7f] +// GFX11: v_swap_b16 v5.h, v1.l ; encoding: [0x01,0xcd,0x0a,0x7f] v_swap_b16 v127.l, v127.l -// GFX11: encoding: [0x7f,0xcd,0xfe,0x7e] +// GFX11: v_swap_b16 v127.l, v127.l ; encoding: [0x7f,0xcd,0xfe,0x7e] v_swap_b32 v5, v1 -// GFX11: encoding: [0x01,0xcb,0x0a,0x7e] +// GFX11: v_swap_b32 v5, v1 ; encoding: [0x01,0xcb,0x0a,0x7e] v_swap_b32 v255, v255 -// GFX11: encoding: [0xff,0xcb,0xfe,0x7f] +// GFX11: v_swap_b32 v255, v255 ; encoding: [0xff,0xcb,0xfe,0x7f] v_swaprel_b32 v5, v1 -// GFX11: encoding: [0x01,0xd1,0x0a,0x7e] +// GFX11: v_swaprel_b32 v5, v1 ; encoding: [0x01,0xd1,0x0a,0x7e] v_swaprel_b32 v255, v255 -// GFX11: encoding: [0xff,0xd1,0xfe,0x7f] +// GFX11: v_swaprel_b32 v255, v255 ; encoding: [0xff,0xd1,0xfe,0x7f] v_trunc_f16 v5, v1 -// GFX11: encoding: [0x01,0xbb,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, v1 ; encoding: [0x01,0xbb,0x0a,0x7e] v_trunc_f16 v5, v127 -// GFX11: encoding: [0x7f,0xbb,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, v127 ; encoding: [0x7f,0xbb,0x0a,0x7e] v_trunc_f16 v5, s1 -// GFX11: encoding: [0x01,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, s1 ; encoding: [0x01,0xba,0x0a,0x7e] v_trunc_f16 v5, s105 -// GFX11: encoding: [0x69,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, s105 ; encoding: [0x69,0xba,0x0a,0x7e] v_trunc_f16 v5, vcc_lo -// GFX11: encoding: [0x6a,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, vcc_lo ; encoding: [0x6a,0xba,0x0a,0x7e] v_trunc_f16 v5, vcc_hi -// GFX11: encoding: [0x6b,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, vcc_hi ; encoding: [0x6b,0xba,0x0a,0x7e] v_trunc_f16 v5, ttmp15 -// GFX11: encoding: [0x7b,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, ttmp15 ; encoding: [0x7b,0xba,0x0a,0x7e] v_trunc_f16 v5, m0 -// GFX11: encoding: [0x7d,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, m0 ; encoding: [0x7d,0xba,0x0a,0x7e] v_trunc_f16 v5, exec_lo -// GFX11: encoding: [0x7e,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, exec_lo ; encoding: [0x7e,0xba,0x0a,0x7e] v_trunc_f16 v5, exec_hi -// GFX11: encoding: [0x7f,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, exec_hi ; encoding: [0x7f,0xba,0x0a,0x7e] v_trunc_f16 v5, null -// GFX11: encoding: [0x7c,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, null ; encoding: [0x7c,0xba,0x0a,0x7e] v_trunc_f16 v5, -1 -// GFX11: encoding: [0xc1,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, -1 ; encoding: [0xc1,0xba,0x0a,0x7e] v_trunc_f16 v5, 0.5 -// GFX11: encoding: [0xf0,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, 0.5 ; encoding: [0xf0,0xba,0x0a,0x7e] v_trunc_f16 v5, src_scc -// GFX11: encoding: [0xfd,0xba,0x0a,0x7e] +// GFX11: v_trunc_f16_e32 v5, src_scc ; encoding: [0xfd,0xba,0x0a,0x7e] v_trunc_f16 v127, 0xfe0b -// GFX11: encoding: [0xff,0xba,0xfe,0x7e,0x0b,0xfe,0x00,0x00] +// GFX11: v_trunc_f16_e32 v127, 0xfe0b ; encoding: [0xff,0xba,0xfe,0x7e,0x0b,0xfe,0x00,0x00] v_trunc_f32 v5, v1 -// GFX11: encoding: [0x01,0x43,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, v1 ; encoding: [0x01,0x43,0x0a,0x7e] v_trunc_f32 v5, v255 -// GFX11: encoding: [0xff,0x43,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, v255 ; encoding: [0xff,0x43,0x0a,0x7e] v_trunc_f32 v5, s1 -// GFX11: encoding: [0x01,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, s1 ; encoding: [0x01,0x42,0x0a,0x7e] v_trunc_f32 v5, s105 -// GFX11: encoding: [0x69,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, s105 ; encoding: [0x69,0x42,0x0a,0x7e] v_trunc_f32 v5, vcc_lo -// GFX11: encoding: [0x6a,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, vcc_lo ; encoding: [0x6a,0x42,0x0a,0x7e] v_trunc_f32 v5, vcc_hi -// GFX11: encoding: [0x6b,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, vcc_hi ; encoding: [0x6b,0x42,0x0a,0x7e] v_trunc_f32 v5, ttmp15 -// GFX11: encoding: [0x7b,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, ttmp15 ; encoding: [0x7b,0x42,0x0a,0x7e] v_trunc_f32 v5, m0 -// GFX11: encoding: [0x7d,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, m0 ; encoding: [0x7d,0x42,0x0a,0x7e] v_trunc_f32 v5, exec_lo -// GFX11: encoding: [0x7e,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, exec_lo ; encoding: [0x7e,0x42,0x0a,0x7e] v_trunc_f32 v5, exec_hi -// GFX11: encoding: [0x7f,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, exec_hi ; encoding: [0x7f,0x42,0x0a,0x7e] v_trunc_f32 v5, null -// GFX11: encoding: [0x7c,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, null ; encoding: [0x7c,0x42,0x0a,0x7e] v_trunc_f32 v5, -1 -// GFX11: encoding: [0xc1,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, -1 ; encoding: [0xc1,0x42,0x0a,0x7e] v_trunc_f32 v5, 0.5 -// GFX11: encoding: [0xf0,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, 0.5 ; encoding: [0xf0,0x42,0x0a,0x7e] v_trunc_f32 v5, src_scc -// GFX11: encoding: [0xfd,0x42,0x0a,0x7e] +// GFX11: v_trunc_f32_e32 v5, src_scc ; encoding: [0xfd,0x42,0x0a,0x7e] v_trunc_f32 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x42,0xfe,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_trunc_f32_e32 v255, 0xaf123456 ; encoding: [0xff,0x42,0xfe,0x7f,0x56,0x34,0x12,0xaf] v_trunc_f64 v[5:6], v[1:2] -// GFX11: encoding: [0x01,0x2f,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], v[1:2] ; encoding: [0x01,0x2f,0x0a,0x7e] v_trunc_f64 v[5:6], v[254:255] -// GFX11: encoding: [0xfe,0x2f,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], v[254:255] ; encoding: [0xfe,0x2f,0x0a,0x7e] v_trunc_f64 v[5:6], s[2:3] -// GFX11: encoding: [0x02,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], s[2:3] ; encoding: [0x02,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], s[104:105] -// GFX11: encoding: [0x68,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], s[104:105] ; encoding: [0x68,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], vcc -// GFX11: encoding: [0x6a,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], vcc ; encoding: [0x6a,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x7a,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], ttmp[14:15] ; encoding: [0x7a,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], exec -// GFX11: encoding: [0x7e,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], exec ; encoding: [0x7e,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], null -// GFX11: encoding: [0x7c,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], null ; encoding: [0x7c,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], -1 -// GFX11: encoding: [0xc1,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], -1 ; encoding: [0xc1,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], 0.5 -// GFX11: encoding: [0xf0,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], 0.5 ; encoding: [0xf0,0x2e,0x0a,0x7e] v_trunc_f64 v[5:6], src_scc -// GFX11: encoding: [0xfd,0x2e,0x0a,0x7e] +// GFX11: v_trunc_f64_e32 v[5:6], src_scc ; encoding: [0xfd,0x2e,0x0a,0x7e] v_trunc_f64 v[254:255], 0xaf123456 -// GFX11: encoding: [0xff,0x2e,0xfc,0x7f,0x56,0x34,0x12,0xaf] +// GFX11: v_trunc_f64_e32 v[254:255], 0xaf123456 ; encoding: [0xff,0x2e,0xfc,0x7f,0x56,0x34,0x12,0xaf] diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp16.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp16.s index 718837865eb2..bcbac043649c 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp16.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp16.s @@ -1,2816 +1,2817 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize32 -show-encoding %s | FileCheck --check-prefixes=GFX11 %s // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize64 -show-encoding %s | FileCheck --check-prefixes=GFX11 %s v_bfrev_b32_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_bfrev_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_bfrev_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x40,0x01,0xff] v_bfrev_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x41,0x01,0xff] v_bfrev_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x01,0x01,0xff] v_bfrev_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_bfrev_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x11,0x01,0xff] v_bfrev_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_bfrev_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x21,0x01,0xff] v_bfrev_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_bfrev_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_bfrev_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x50,0x01,0xff] v_bfrev_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_bfrev_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_bfrev_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_bfrev_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x60,0x09,0x13] v_bfrev_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x70,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_bfrev_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x70,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_ceil_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ceil_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ceil_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ceil_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ceil_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ceil_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ceil_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ceil_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ceil_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ceil_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ceil_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_ceil_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ceil_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xb8,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_ceil_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb8,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_ceil_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xb8,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_ceil_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb8,0x0a,0x7f,0x81,0x60,0x09,0x13] v_ceil_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xb8,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_ceil_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb8,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_ceil_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ceil_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ceil_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ceil_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ceil_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ceil_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ceil_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ceil_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ceil_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ceil_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ceil_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_ceil_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ceil_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_ceil_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ceil_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_ceil_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ceil_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x44,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_ceil_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x44,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cls_i32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cls_i32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cls_i32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cls_i32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cls_i32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cls_i32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cls_i32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cls_i32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cls_i32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cls_i32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cls_i32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cls_i32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cls_i32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cls_i32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cls_i32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cls_i32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cls_i32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cls_i32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cls_i32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_clz_i32_u32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_clz_i32_u32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_clz_i32_u32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] v_clz_i32_u32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] v_clz_i32_u32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] v_clz_i32_u32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_clz_i32_u32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] v_clz_i32_u32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_clz_i32_u32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] v_clz_i32_u32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_clz_i32_u32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] v_clz_i32_u32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_clz_i32_u32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] v_clz_i32_u32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_clz_i32_u32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cos_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cos_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cos_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cos_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cos_f16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cos_f16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cos_f16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cos_f16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cos_f16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cos_f16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cos_f16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cos_f16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cos_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cos_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cos_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cos_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cos_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cos_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cos_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xc2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX11: v_cos_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_cos_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cos_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cos_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cos_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cos_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cos_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cos_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cos_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cos_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cos_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cos_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cos_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cos_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cos_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cos_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cos_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cos_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cos_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cos_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x6c,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cos_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x6c,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_ctz_i32_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ctz_i32_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ctz_i32_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ctz_i32_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ctz_i32_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ctz_i32_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ctz_i32_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ctz_i32_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ctz_i32_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ctz_i32_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_ctz_i32_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f16_f32 v5.l, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f16_f32 v5.l, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f16_f32 v5.l, v1 row_mirror -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f16_f32 v5.h, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x14,0x0a,0x7f,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f16_f32_dpp v5.h, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x14,0x0a,0x7f,0x01,0x60,0x09,0x13] v_cvt_f16_f32 v127.h, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x14,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_f16_f32_dpp v127.h, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x14,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_f16_i16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f16_i16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f16_i16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f16_i16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xa2,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_i16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa2,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_cvt_f16_i16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xa2,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_f16_i16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa2,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_f16_i16 v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xa2,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_i16_dpp v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa2,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f16_u16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f16_u16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f16_u16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f16_u16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xa0,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_u16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa0,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_cvt_f16_u16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xa0,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_f16_u16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa0,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_f16_u16 v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xa0,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_u16_dpp v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa0,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_f16 v5, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_f16 v5, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_f16 v5, v1.l row_mirror -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_f16 v5, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x16,0x0a,0x7e,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_f32_f16_dpp v5, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x16,0x0a,0x7e,0x81,0x60,0x09,0x13] v_cvt_f32_f16 v255, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x16,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_f32_f16_dpp v255, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x16,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_f32_i32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_i32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_i32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_i32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_i32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_i32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_i32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_i32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_i32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_i32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_i32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x0a,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_i32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x0a,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_u32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_u32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_u32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_u32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_u32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_u32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_u32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_u32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_u32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_u32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_u32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x0c,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_u32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x0c,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte0 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte0 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte0 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte0 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte0 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x22,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte0_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x22,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte1 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte1 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte1 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte1 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte1 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x24,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte1_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x24,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte2 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte2 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte2 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte2 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte2 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x26,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte2_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x26,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte3 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte3 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte3 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte3 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte3 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x28,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte3_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x28,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_floor_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_floor_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_floor_i32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_floor_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_floor_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_floor_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_flr_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_flr_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_flr_i32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_flr_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_flr_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_floor_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_i16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_i16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_i16_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_i16_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xa6,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_cvt_i16_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa6,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_cvt_i16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xa6,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_i16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa6,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_i16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xa6,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_i16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa6,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_i32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_i32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_i32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_i32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x10,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x10,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_i32_i16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_i32_i16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_i32_i16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_i32_i16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_i32_i16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_i32_i16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_i32_i16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_i32_i16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_i32_i16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_i32_i16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_i32_i16 v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xd4,0xfe,0x7f,0x7f,0x6f,0x05,0x30] +// GFX11: v_cvt_i32_i16_dpp v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xd4,0xfe,0x7f,0x7f,0x6f,0x05,0x30] v_cvt_nearest_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_nearest_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_nearest_i32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_nearest_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_nearest_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_nearest_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_norm_i16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_norm_i16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_norm_i16_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xc6,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_cvt_norm_i16_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc6,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_cvt_norm_i16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xc6,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_norm_i16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc6,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_norm_i16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xc6,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_norm_i16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc6,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_norm_u16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_norm_u16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_norm_u16_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xc8,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_cvt_norm_u16_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc8,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_cvt_norm_u16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xc8,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_norm_u16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc8,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_norm_u16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xc8,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_norm_u16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc8,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_off_f32_i4 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_off_f32_i4 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_off_f32_i4 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_off_f32_i4 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_off_f32_i4 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x1c,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_off_f32_i4_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x1c,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_rpi_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_rpi_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_rpi_i32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_rpi_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_rpi_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_nearest_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_u16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_u16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_u16_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_u16_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xa4,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_cvt_u16_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa4,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_cvt_u16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xa4,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_cvt_u16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa4,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_u16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xa4,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_u16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa4,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_u32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_u32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_u32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_u32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_u32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_u32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_u32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_u32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_u32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_u32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_u32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x0e,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_cvt_u32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x0e,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_u32_u16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_u32_u16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_u32_u16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_u32_u16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_u32_u16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_u32_u16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_u32_u16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_u32_u16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_u32_u16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_u32_u16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_u32_u16 v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xd6,0xfe,0x7f,0x7f,0x6f,0x05,0x30] +// GFX11: v_cvt_u32_u16_dpp v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xd6,0xfe,0x7f,0x7f,0x6f,0x05,0x30] v_exp_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_exp_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_exp_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x40,0x01,0xff] v_exp_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x41,0x01,0xff] v_exp_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x01,0x01,0xff] v_exp_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_exp_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x11,0x01,0xff] v_exp_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_exp_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x21,0x01,0xff] v_exp_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_exp_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_exp_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x50,0x01,0xff] v_exp_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xb0,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_exp_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb0,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_exp_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xb0,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_exp_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb0,0x0a,0x7f,0x81,0x60,0x09,0x13] v_exp_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xb0,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_exp_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb0,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_exp_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_exp_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_exp_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_exp_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_exp_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_exp_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_exp_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_exp_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_exp_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_exp_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_exp_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_exp_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_exp_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_exp_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_exp_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_exp_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_exp_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_exp_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_exp_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x4a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_exp_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x4a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_ffbh_i32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_cls_i32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ffbh_i32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_cls_i32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ffbh_i32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ffbh_i32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ffbh_i32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ffbh_i32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ffbh_i32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ffbh_i32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ffbh_i32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ffbh_i32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ffbh_i32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_cls_i32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ffbh_i32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_cls_i32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ffbh_i32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_cls_i32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ffbh_i32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_cls_i32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_ffbh_u32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ffbh_u32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ffbh_u32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ffbh_u32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ffbh_u32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ffbh_u32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ffbh_u32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ffbh_u32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ffbh_u32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ffbh_u32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ffbh_u32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ffbh_u32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ffbh_u32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_clz_i32_u32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ffbh_u32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_clz_i32_u32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_ffbl_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ffbl_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ffbl_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ffbl_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ffbl_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ffbl_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ffbl_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ffbl_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ffbl_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ffbl_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ffbl_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ffbl_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ffbl_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_ctz_i32_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ffbl_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_ctz_i32_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_floor_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_floor_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_floor_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_floor_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_floor_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_floor_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_floor_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_floor_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_floor_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_floor_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_floor_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_floor_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_floor_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xb6,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_floor_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb6,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_floor_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xb6,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_floor_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb6,0x0a,0x7f,0x81,0x60,0x09,0x13] v_floor_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xb6,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_floor_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb6,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_floor_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_floor_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_floor_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_floor_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_floor_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x40,0x01,0xff] v_floor_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x41,0x01,0xff] v_floor_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x01,0x01,0xff] v_floor_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_floor_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x11,0x01,0xff] v_floor_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_floor_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x21,0x01,0xff] v_floor_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_floor_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_floor_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x50,0x01,0xff] v_floor_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_floor_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_floor_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_floor_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x60,0x09,0x13] v_floor_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x48,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_floor_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x48,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_fract_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_fract_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_fract_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_fract_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_fract_f16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x40,0x01,0xff] v_fract_f16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x41,0x01,0xff] v_fract_f16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x01,0x01,0xff] v_fract_f16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_fract_f16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x11,0x01,0xff] v_fract_f16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_fract_f16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x21,0x01,0xff] v_fract_f16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_fract_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_fract_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x50,0x01,0xff] v_fract_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_fract_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_fract_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_fract_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x60,0x09,0x13] v_fract_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xbe,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX11: v_fract_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xbe,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_fract_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_fract_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_fract_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_fract_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_fract_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x40,0x01,0xff] v_fract_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x41,0x01,0xff] v_fract_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x01,0x01,0xff] v_fract_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_fract_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x11,0x01,0xff] v_fract_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_fract_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x21,0x01,0xff] v_fract_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_fract_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_fract_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x50,0x01,0xff] v_fract_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_fract_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_fract_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_fract_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x60,0x09,0x13] v_fract_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x40,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_fract_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x40,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_frexp_exp_i16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_exp_i16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_exp_i16_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xb4,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_frexp_exp_i16_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb4,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_frexp_exp_i16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xb4,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_frexp_exp_i16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb4,0x0a,0x7f,0x81,0x60,0x09,0x13] v_frexp_exp_i16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xb4,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_frexp_exp_i16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb4,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_frexp_exp_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_exp_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_exp_i32_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_exp_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_exp_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x7e,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_frexp_exp_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x7e,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_frexp_mant_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_mant_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_mant_f16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_mant_f16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_mant_f16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_mant_f16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_mant_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_mant_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_mant_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_mant_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_mant_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xb2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX11: v_frexp_mant_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_frexp_mant_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_mant_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_mant_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_mant_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_mant_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_mant_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_mant_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_mant_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_mant_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_mant_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_mant_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x80,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_frexp_mant_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x80,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_log_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_log_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_log_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x40,0x01,0xff] v_log_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x41,0x01,0xff] v_log_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x01,0x01,0xff] v_log_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_log_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x11,0x01,0xff] v_log_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_log_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x21,0x01,0xff] v_log_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_log_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_log_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x50,0x01,0xff] v_log_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xae,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_log_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xae,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_log_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xae,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_log_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xae,0x0a,0x7f,0x81,0x60,0x09,0x13] v_log_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xae,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_log_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xae,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_log_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_log_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_log_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_log_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_log_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_log_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_log_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_log_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_log_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_log_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_log_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_log_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_log_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_log_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_log_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_log_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_log_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_log_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_log_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x4e,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_log_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x4e,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_mov_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_mov_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_mov_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_mov_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_mov_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x40,0x01,0xff] v_mov_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x41,0x01,0xff] v_mov_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x01,0x01,0xff] v_mov_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_mov_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x11,0x01,0xff] v_mov_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_mov_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x21,0x01,0xff] v_mov_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_mov_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_mov_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x50,0x01,0xff] v_mov_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_mov_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_mov_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_mov_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x60,0x09,0x13] v_mov_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x02,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_mov_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x02,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movreld_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movreld_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movreld_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movreld_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movreld_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movreld_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movreld_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movreld_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movreld_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movreld_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movreld_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_movreld_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movreld_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_movreld_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movreld_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_movreld_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movreld_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x84,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_movreld_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x84,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movrels_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movrels_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movrels_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movrels_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movrels_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movrels_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movrels_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movrels_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movrels_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movrels_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movrels_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_movrels_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movrels_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_movrels_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movrels_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_movrels_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movrels_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x86,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_movrels_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x86,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movrelsd_2_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movrelsd_2_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movrelsd_2_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movrelsd_2_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movrelsd_2_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x90,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_movrelsd_2_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x90,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movrelsd_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movrelsd_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movrelsd_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movrelsd_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movrelsd_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movrelsd_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movrelsd_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movrelsd_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movrelsd_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movrelsd_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movrelsd_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movrelsd_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movrelsd_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_movrelsd_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movrelsd_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x88,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_movrelsd_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x88,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_not_b16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_not_b16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_not_b16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_not_b16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_not_b16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_not_b16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_not_b16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_not_b16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_not_b16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_not_b16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_not_b16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_not_b16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_not_b16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_not_b16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_not_b16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_not_b16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_not_b16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_not_b16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_not_b16 v127, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xd2,0xfe,0x7e,0x7f,0x6f,0x05,0x30] +// GFX11: v_not_b16_dpp v127, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xd2,0xfe,0x7e,0x7f,0x6f,0x05,0x30] v_not_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_not_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_not_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_not_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_not_b32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_not_b32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_not_b32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_not_b32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_not_b32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_not_b32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_not_b32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_not_b32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_not_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_not_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_not_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_not_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_not_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_not_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_not_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x6e,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX11: v_not_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x6e,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_rcp_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rcp_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rcp_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rcp_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rcp_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rcp_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rcp_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rcp_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rcp_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rcp_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rcp_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rcp_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rcp_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xa8,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_rcp_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa8,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_rcp_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xa8,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_rcp_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa8,0x0a,0x7f,0x81,0x60,0x09,0x13] v_rcp_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xa8,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_rcp_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa8,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rcp_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rcp_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rcp_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rcp_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rcp_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rcp_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rcp_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rcp_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rcp_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rcp_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rcp_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rcp_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rcp_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_rcp_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rcp_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_rcp_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rcp_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x54,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_rcp_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x54,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rcp_iflag_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rcp_iflag_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rcp_iflag_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rcp_iflag_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rcp_iflag_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x56,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_rcp_iflag_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x56,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rndne_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rndne_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rndne_f16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rndne_f16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rndne_f16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rndne_f16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rndne_f16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rndne_f16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rndne_f16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rndne_f16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rndne_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rndne_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rndne_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_rndne_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rndne_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_rndne_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rndne_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xbc,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX11: v_rndne_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xbc,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_rndne_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rndne_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rndne_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rndne_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rndne_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rndne_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rndne_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rndne_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rndne_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rndne_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rndne_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rndne_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rndne_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_rndne_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rndne_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_rndne_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rndne_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x46,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_rndne_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x46,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rsq_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rsq_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rsq_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rsq_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rsq_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rsq_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rsq_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rsq_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rsq_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rsq_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rsq_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rsq_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rsq_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xac,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_rsq_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xac,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_rsq_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xac,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_rsq_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xac,0x0a,0x7f,0x81,0x60,0x09,0x13] v_rsq_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xac,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_rsq_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xac,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rsq_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rsq_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rsq_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rsq_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rsq_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rsq_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rsq_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rsq_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rsq_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rsq_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rsq_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_rsq_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rsq_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_rsq_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rsq_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_rsq_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rsq_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x5c,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_rsq_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x5c,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_sat_pk_u8_i16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sat_pk_u8_i16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sat_pk_u8_i16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sat_pk_u8_i16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sat_pk_u8_i16 v127, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xc4,0xfe,0x7e,0xff,0x6f,0x05,0x30] +// GFX11: v_sat_pk_u8_i16_dpp v127, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc4,0xfe,0x7e,0xff,0x6f,0x05,0x30] v_sin_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_sin_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sin_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_sin_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sin_f16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sin_f16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sin_f16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sin_f16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sin_f16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sin_f16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sin_f16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sin_f16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sin_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_sin_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sin_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_sin_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sin_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_sin_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sin_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xc0,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX11: v_sin_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc0,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_sin_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_sin_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sin_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_sin_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sin_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sin_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sin_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sin_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sin_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sin_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sin_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sin_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sin_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_sin_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sin_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_sin_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sin_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_sin_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sin_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x6a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_sin_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x6a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_sqrt_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sqrt_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sqrt_f16 v5.l, v1.l row_mirror -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_half_mirror -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_shl:1 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_shl:15 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_shr:1 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_shr:15 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_ror:1 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_ror:15 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sqrt_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sqrt_f16 v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xaa,0xfe,0x7e,0x7f,0x5f,0x01,0x01] +// GFX11: v_sqrt_f16_dpp v127.l, v127.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xaa,0xfe,0x7e,0x7f,0x5f,0x01,0x01] v_sqrt_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xaa,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX11: v_sqrt_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xaa,0x0a,0x7f,0x81,0x60,0x09,0x13] v_sqrt_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xaa,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_sqrt_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xaa,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_sqrt_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sqrt_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sqrt_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sqrt_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sqrt_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sqrt_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sqrt_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sqrt_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sqrt_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sqrt_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sqrt_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_sqrt_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sqrt_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_sqrt_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sqrt_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_sqrt_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sqrt_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x66,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_sqrt_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x66,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_trunc_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_trunc_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_trunc_f16 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x40,0x01,0xff] v_trunc_f16 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x41,0x01,0xff] v_trunc_f16 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x01,0x01,0xff] v_trunc_f16 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_trunc_f16 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x11,0x01,0xff] v_trunc_f16 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_trunc_f16 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x21,0x01,0xff] v_trunc_f16 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_trunc_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_trunc_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x50,0x01,0xff] v_trunc_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_trunc_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_trunc_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_trunc_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x60,0x09,0x13] v_trunc_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0xba,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX11: v_trunc_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xba,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_trunc_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_trunc_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_trunc_f32 v5, v1 row_mirror -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x40,0x01,0xff] v_trunc_f32 v5, v1 row_half_mirror -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x41,0x01,0xff] v_trunc_f32 v5, v1 row_shl:1 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x01,0x01,0xff] v_trunc_f32 v5, v1 row_shl:15 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_trunc_f32 v5, v1 row_shr:1 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x11,0x01,0xff] v_trunc_f32 v5, v1 row_shr:15 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_trunc_f32 v5, v1 row_ror:1 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x21,0x01,0xff] v_trunc_f32 v5, v1 row_ror:15 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_trunc_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX11: v_trunc_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x50,0x01,0xff] v_trunc_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX11: v_trunc_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_trunc_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX11: v_trunc_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x60,0x09,0x13] v_trunc_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: encoding: [0xfa,0x42,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX11: v_trunc_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x42,0xfe,0x7f,0xff,0x6f,0x35,0x30] diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp8.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp8.s index d7a9a3811ddc..872a0e2ff25e 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp8.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop1_dpp8.s @@ -1,653 +1,654 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize32 -show-encoding %s | FileCheck --check-prefixes=GFX11 %s // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize64 -show-encoding %s | FileCheck --check-prefixes=GFX11 %s v_bfrev_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_bfrev_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] v_bfrev_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_bfrev_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] v_bfrev_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x70,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x70,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ceil_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb8,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_ceil_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb8,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_ceil_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xb8,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_ceil_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb8,0x0a,0x7f,0x81,0x77,0x39,0x05] v_ceil_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xb8,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_ceil_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb8,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ceil_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x44,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_ceil_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x44,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cls_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cls_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cls_i32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cls_i32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] v_clz_i32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_clz_i32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_clz_i32_u32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cos_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xc2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_cos_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cos_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x6c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cos_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x6c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ctz_i32_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ctz_i32_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ctz_i32_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f16_f32 v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x14,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_f32_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x14,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_f32 v127.l, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x14,0xfe,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_f32_dpp v127.l, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x14,0xfe,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_f32 v5.h, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x14,0x0a,0x7f,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_f32_dpp v5.h, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x14,0x0a,0x7f,0x01,0x77,0x39,0x05] v_cvt_f16_f32 v127.h, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x14,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_dpp v127.h, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x14,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f16_i16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_i16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa2,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa2,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_cvt_f16_i16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xa2,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa2,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_f16_i16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xa2,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa2,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f16_u16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_u16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa0,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa0,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_cvt_f16_u16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xa0,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa0,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_f16_u16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xa0,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa0,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_f16 v5, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x16,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_f16_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x16,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_f16 v5, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x16,0x0a,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_f32_f16_dpp v5, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x16,0x0a,0x7e,0x7f,0x77,0x39,0x05] v_cvt_f32_f16 v5, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x16,0x0a,0x7e,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_f32_f16_dpp v5, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x16,0x0a,0x7e,0x81,0x77,0x39,0x05] v_cvt_f32_f16 v255, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x16,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_dpp v255, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x16,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_i32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x0a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x0a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_u32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x0c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x0c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte0 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte0_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x22,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x22,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte1 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte1_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x24,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x24,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte2 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte2_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x26,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x26,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte3 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte3_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x28,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x28,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_floor_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_flr_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i16_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa6,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa6,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_cvt_i16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xa6,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa6,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_i16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xa6,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa6,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x10,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x10,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_i32_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_i16 v255, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xd4,0xfe,0x7f,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_dpp v255, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xd4,0xfe,0x7f,0x7f,0x00,0x00,0x00] v_cvt_nearest_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_norm_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc6,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc6,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_cvt_norm_i16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xc6,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc6,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_norm_i16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xc6,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc6,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_norm_u16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc8,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc8,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_cvt_norm_u16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xc8,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc8,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_norm_u16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xc8,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc8,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_off_f32_i4 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_off_f32_i4_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x1c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x1c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_rpi_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_u16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u16_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa4,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa4,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_cvt_u16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xa4,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa4,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_u16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xa4,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa4,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_u32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x0e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x0e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_u32_u16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_u16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_u16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_u16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_u16 v255, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xd6,0xfe,0x7f,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_dpp v255, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xd6,0xfe,0x7f,0x7f,0x00,0x00,0x00] v_exp_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb0,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_exp_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb0,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_exp_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xb0,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_exp_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb0,0x0a,0x7f,0x81,0x77,0x39,0x05] v_exp_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xb0,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_exp_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb0,0xfe,0x7f,0xff,0x00,0x00,0x00] v_exp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x4a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_exp_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x4a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ffbh_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_i32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_cls_i32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ffbh_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_u32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ffbl_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbl_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbl_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] v_floor_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb6,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_floor_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb6,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_floor_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xb6,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_floor_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb6,0x0a,0x7f,0x81,0x77,0x39,0x05] v_floor_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xb6,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_floor_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb6,0xfe,0x7f,0xff,0x00,0x00,0x00] v_floor_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x48,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_floor_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x48,0xfe,0x7f,0xff,0x00,0x00,0x00] v_fract_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xbe,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_fract_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xbe,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_fract_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x40,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_fract_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x40,0xfe,0x7f,0xff,0x00,0x00,0x00] v_frexp_exp_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb4,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb4,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_frexp_exp_i16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xb4,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb4,0x0a,0x7f,0x81,0x77,0x39,0x05] v_frexp_exp_i16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xb4,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb4,0xfe,0x7f,0xff,0x00,0x00,0x00] v_frexp_exp_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x7e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x7e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_frexp_mant_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xb2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_frexp_mant_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x80,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x80,0xfe,0x7f,0xff,0x00,0x00,0x00] v_log_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xae,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_log_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xae,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xae,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_log_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xae,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_log_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xae,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_log_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xae,0x0a,0x7f,0x81,0x77,0x39,0x05] v_log_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xae,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_log_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xae,0xfe,0x7f,0xff,0x00,0x00,0x00] v_log_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_log_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_log_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x4e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_log_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x4e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_mov_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_mov_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] v_mov_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_mov_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] v_mov_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x02,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_mov_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x02,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movreld_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movreld_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movreld_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movreld_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movreld_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x84,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_movreld_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x84,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movrels_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movrels_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrels_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movrels_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrels_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x86,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_movrels_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x86,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movrelsd_2_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_2_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_2_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_2_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x90,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_movrelsd_2_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x90,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movrelsd_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x88,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_movrelsd_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x88,0xfe,0x7f,0xff,0x00,0x00,0x00] v_not_b16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_not_b16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_not_b16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xd2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_not_b16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xd2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_not_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_not_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_not_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x6e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_not_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x6e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rcp_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xa8,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_rcp_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa8,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_rcp_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xa8,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_rcp_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa8,0x0a,0x7f,0x81,0x77,0x39,0x05] v_rcp_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xa8,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa8,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rcp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x54,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x54,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rcp_iflag_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_iflag_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_iflag_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_iflag_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x56,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x56,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rndne_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xbc,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_rndne_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xbc,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_rndne_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x46,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_rndne_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x46,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rsq_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xac,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xac,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xac,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_rsq_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xac,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_rsq_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xac,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_rsq_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xac,0x0a,0x7f,0x81,0x77,0x39,0x05] v_rsq_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xac,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_rsq_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xac,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rsq_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x5c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_rsq_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x5c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_sat_pk_u8_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sat_pk_u8_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16 v127, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xc4,0xfe,0x7e,0xff,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_dpp v127, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc4,0xfe,0x7e,0xff,0x00,0x00,0x00] v_sin_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xc0,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_sin_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc0,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_sin_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x6a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_sin_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x6a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_sqrt_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xaa,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xaa,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f16 v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xaa,0xfe,0x7e,0x7f,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_dpp v127.l, v127.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xaa,0xfe,0x7e,0x7f,0x77,0x39,0x05] v_sqrt_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xaa,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xaa,0x0a,0x7f,0x81,0x77,0x39,0x05] v_sqrt_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xaa,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xaa,0xfe,0x7f,0xff,0x00,0x00,0x00] v_sqrt_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x66,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x66,0xfe,0x7f,0xff,0x00,0x00,0x00] v_trunc_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0xba,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX11: v_trunc_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xba,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_trunc_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: encoding: [0xe9,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: encoding: [0xea,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: encoding: [0xe9,0x42,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX11: v_trunc_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x42,0xfe,0x7f,0xff,0x00,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp16_from_vop1.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp16_from_vop1.s index 916582cd1684..b3735429e9fe 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp16_from_vop1.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp16_from_vop1.s @@ -1,2947 +1,2948 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize32 -show-encoding %s | FileCheck --check-prefixes=GFX11 %s v_bfrev_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_bfrev_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_bfrev_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_bfrev_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_bfrev_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_bfrev_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_ceil_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ceil_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ceil_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_ceil_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xdc,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_ceil_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xdc,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_ceil_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_ceil_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xdc,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xdc,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_ceil_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xdc,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_ceil_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdc,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ceil_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xdc,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_ceil_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xdc,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ceil_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ceil_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ceil_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_ceil_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_ceil_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_ceil_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_ceil_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa2,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa2,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cls_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cls_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cls_i32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cls_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cls_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_cls_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_clz_i32_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_clz_i32_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_clz_i32_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_cos_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cos_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cos_f16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cos_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cos_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cos_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cos_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cos_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cos_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xe1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_cos_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xe1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cos_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cos_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cos_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cos_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cos_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cos_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cos_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cos_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cos_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xb6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_cos_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xb6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ctz_i32_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ctz_i32_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_ctz_i32_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_mirror -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_half_mirror -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:1 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:15 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:1 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:15 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:1 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:15 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f16_f32_e64_dpp v255.h, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_f32_e64_dpp v255.h, -|v255| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f16_i16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_i16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_i16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_i16_e64_dpp v255.h, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc0,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_i16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc0,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f16_u16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f16_u16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_u16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_u16_e64_dpp v255.h, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc0,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f16_u16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc0,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_mirror -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_half_mirror -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:1 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:15 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:1 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:15 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:1 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:15 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f32_f16_e64_dpp v255, -|v255.h| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x89,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_f16_e64_dpp v255, -|v255.h| op_sel:[1,0] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x89,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_i32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x85,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x85,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_u32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x86,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x86,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x91,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x91,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x92,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x92,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x93,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x93,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x94,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x94,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_floor_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_flr_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_flr_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0x88,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_i32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x88,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i32_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i32_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_i32_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x41,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x41,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x41,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x41,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x80,0x8e,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x8e,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_rpi_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_rpi_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0x87,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_u32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x87,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u32_u16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u32_u16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_cvt_u32_u16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_exp_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_exp_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_exp_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_exp_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd8,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_exp_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd8,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_exp_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_exp_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd8,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd8,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_exp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd8,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_exp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd8,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_exp_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd8,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_exp_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd8,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_exp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_exp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_exp_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_exp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_exp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_exp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_exp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_exp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_exp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_exp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ffbh_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ffbh_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ffbh_i32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ffbh_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_cls_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ffbh_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_cls_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_ffbh_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ffbh_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ffbh_u32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ffbh_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ffbh_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_clz_i32_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_ffbl_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ffbl_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ffbl_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ffbl_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ffbl_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_ctz_i32_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_floor_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_floor_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_floor_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_floor_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xdb,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_floor_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xdb,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_floor_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_floor_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xdb,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xdb,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_floor_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xdb,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_floor_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdb,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_floor_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xdb,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_floor_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xdb,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_floor_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_floor_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_floor_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_floor_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_floor_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_floor_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_floor_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_floor_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_floor_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_floor_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_fract_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_fract_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_fract_f16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_fract_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_fract_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_fract_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_fract_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_fract_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_fract_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xdf,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_fract_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdf,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_fract_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_fract_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_fract_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_fract_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_fract_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_fract_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_fract_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_fract_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_fract_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_fract_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x41,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x41,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_frexp_exp_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x01,0xbf,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xbf,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_frexp_mant_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd9,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd9,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_frexp_mant_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xc0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xc0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_log_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_log_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_log_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_log_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_log_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_log_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_log_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_log_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_log_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_log_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_log_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_log_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_log_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_log_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_log_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_log_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_log_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_log_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_log_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_log_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_log_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_log_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_log_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_mov_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_mov_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_mov_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_mov_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_mov_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_mov_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_mov_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_movreld_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_movreld_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_movreld_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_movreld_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_movreld_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_movreld_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_movreld_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_movreld_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xc2,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_movrels_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_movrels_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_movrels_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_movrels_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_movrels_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_movrels_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_movrels_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_movrelsd_2_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_movrelsd_2_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_movrelsd_2_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_movrelsd_2_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_movrelsd_2_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xc8,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_movrelsd_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_movrelsd_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_movrelsd_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_movrelsd_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_movrelsd_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_movrelsd_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xc4,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_not_b16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_not_b16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_not_b16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_not_b16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_not_b16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_not_b16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_not_b16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_not_b16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_not_b16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_not_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_not_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_not_b32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_not_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_not_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_not_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_not_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_not_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_not_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_rcp_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rcp_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rcp_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rcp_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rcp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rcp_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rcp_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rcp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rcp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rcp_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rcp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rcp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rcp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xaa,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xaa,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xab,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xab,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rndne_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rndne_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rndne_f16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rndne_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rndne_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rndne_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rndne_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xde,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xde,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rndne_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rndne_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rndne_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rndne_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rndne_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rndne_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rndne_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rsq_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rsq_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rsq_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rsq_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rsq_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rsq_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rsq_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rsq_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rsq_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rsq_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rsq_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rsq_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rsq_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rsq_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_rsq_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_rsq_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rsq_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_rsq_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xae,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xae,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_sat_pk_u8_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_sat_pk_u8_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX11: v_sat_pk_u8_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_sin_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sin_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sin_f16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_sin_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sin_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_sin_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sin_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_sin_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sin_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xe0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_sin_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xe0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sin_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sin_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sin_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_sin_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sin_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_sin_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sin_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_sin_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sin_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xb5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_sin_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xb5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sqrt_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_mirror -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sqrt_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sqrt_f16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x48,0xd5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_sqrt_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sqrt_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sqrt_f16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x08,0xd5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sqrt_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xd5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_sqrt_f16_e64_dpp v255.l, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sqrt_f16_e64_dpp v255.h, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0xc1,0xd5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_sqrt_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sqrt_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sqrt_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sqrt_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sqrt_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xb3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xb3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_trunc_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_trunc_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_trunc_f16_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_trunc_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_trunc_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_trunc_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_trunc_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xdd,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdd,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_trunc_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_trunc_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_trunc_f32_e64_dpp v5, v1 row_mirror -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_half_mirror -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shl:1 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shl:15 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shr:1 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shr:15 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_ror:1 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_ror:15 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX11: v_trunc_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX11: v_trunc_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_trunc_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX11: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX11: v_trunc_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX11: [0xff,0x81,0xa1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX11: v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp8_from_vop1.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp8_from_vop1.s index 029ab9b17e1d..495720ef1651 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp8_from_vop1.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop3_dpp8_from_vop1.s @@ -1,850 +1,851 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize32 -show-encoding %s | FileCheck --check-prefix=GFX11 %s v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb8,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb8,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_bfrev_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_ceil_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xdc,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xdc,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xdc,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdc,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xdc,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xdc,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xdc,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdc,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ceil_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xdc,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xdc,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ceil_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ceil_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_ceil_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa2,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_ceil_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa2,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa2,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa2,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cls_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_clz_i32_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_cos_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cos_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cos_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xe1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cos_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xe1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xe1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cos_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cos_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cos_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cos_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cos_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xb6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xb6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ctz_i32_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_cvt_f16_f32_e64_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8a,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8a,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f16_f32_e64_dpp v255.h, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64_dpp v255.h, -|v255| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f16_i16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f16_i16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_i16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v255.h, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc0,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc0,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f16_u16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f16_u16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f16_u16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v255.h, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc0,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc0,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_f16_e64_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8b,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8b,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f32_f16_e64_dpp v255, -|v255.h| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x89,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64_dpp v255, -|v255.h| op_sel:[1,0] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x89,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f32_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x85,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_i32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x85,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x85,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x85,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_u32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_u32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x86,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_u32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x86,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x86,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x86,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x91,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x91,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x91,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x91,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x92,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x92,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x92,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x92,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x93,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x93,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x93,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x93,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x94,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x94,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x94,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x94,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x88,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x88,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x88,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x88,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0x88,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x88,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xea,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xea,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x41,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x41,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x41,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x41,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_off_f32_i4_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8e,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8e,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x80,0x8e,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x8e,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x87,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x87,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x87,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x87,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0x87,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x87,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xeb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xeb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_u16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_exp_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd8,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd8,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd8,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd8,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd8,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd8,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd8,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd8,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_exp_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd8,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd8,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_exp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_exp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_exp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_exp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_exp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ffbh_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_ffbh_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_ffbl_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbl_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbl_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_floor_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xdb,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xdb,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xdb,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdb,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xdb,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xdb,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xdb,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdb,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_floor_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xdb,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xdb,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_floor_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_floor_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_floor_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_floor_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_floor_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_fract_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_fract_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_fract_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xdf,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdf,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_fract_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xdf,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdf,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_fract_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_fract_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_fract_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_fract_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_fract_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x41,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x41,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xbf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xbf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xbf,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xbf,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x01,0xbf,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xbf,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_frexp_mant_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_mant_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_frexp_mant_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd9,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd9,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd9,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd9,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_frexp_mant_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_mant_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_frexp_mant_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xc0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_frexp_mant_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xc0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xc0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_log_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_log_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_log_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_log_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_log_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_log_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_log_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_log_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_log_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_log_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_log_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_log_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_log_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_log_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_log_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0x81,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x81,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_mov_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_movreld_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xc2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movreld_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movreld_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xc2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movreld_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movreld_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xc2,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xc2,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xc3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrels_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_movrels_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_movrelsd_2_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xc8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrelsd_2_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xc8,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_2_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc8,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrelsd_2_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xc8,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_movrelsd_2_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xc8,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_movrelsd_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xc4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrelsd_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xc4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_movrelsd_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrelsd_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xc4,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_movrelsd_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xc4,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xe9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_not_b16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb7,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb7,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_not_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_rcp_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rcp_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rcp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rcp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xaa,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xaa,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xaa,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xaa,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rcp_iflag_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xab,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xab,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xab,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xab,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rndne_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rndne_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rndne_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xde,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xde,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xde,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xde,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rndne_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rndne_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rndne_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rndne_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rsq_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rsq_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rsq_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rsq_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rsq_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xae,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_rsq_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xae,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xae,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xae,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xe2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_sin_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sin_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sin_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xe0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sin_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xe0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xe0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sin_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sin_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sin_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_sin_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sin_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xb5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xb5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sqrt_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x48,0xd5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xd5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x08,0xd5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xd5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64_dpp v255.l, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sqrt_f16_e64_dpp v255.h, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0xc1,0xd5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sqrt_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sqrt_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sqrt_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xb3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_sqrt_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xb3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xb3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_trunc_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_trunc_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_trunc_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xdd,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdd,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xdd,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdd,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_trunc_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_trunc_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX11: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_trunc_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX11: [0x05,0x00,0xa1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX11: v_trunc_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX11: [0xff,0x81,0xa1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop3_from_vop1.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop3_from_vop1.s index 8fcb9f83f284..da241cce0c0d 100644 --- a/llvm/test/MC/AMDGPU/gfx11_asm_vop3_from_vop1.s +++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop3_from_vop1.s @@ -1,3643 +1,3644 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | FileCheck --check-prefix=GFX11 %s v_bfrev_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xb8,0xd5,0x01,0x01,0x00,0x00] v_bfrev_b32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xb8,0xd5,0xff,0x01,0x00,0x00] v_bfrev_b32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xb8,0xd5,0x01,0x00,0x00,0x00] v_bfrev_b32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xb8,0xd5,0x69,0x00,0x00,0x00] v_bfrev_b32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb8,0xd5,0x6a,0x00,0x00,0x00] v_bfrev_b32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb8,0xd5,0x6b,0x00,0x00,0x00] v_bfrev_b32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb8,0xd5,0x7b,0x00,0x00,0x00] v_bfrev_b32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xb8,0xd5,0x7d,0x00,0x00,0x00] v_bfrev_b32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb8,0xd5,0x7e,0x00,0x00,0x00] v_bfrev_b32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb8,0xd5,0x7f,0x00,0x00,0x00] v_bfrev_b32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, null ; encoding: [0x05,0x00,0xb8,0xd5,0x7c,0x00,0x00,0x00] v_bfrev_b32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xb8,0xd5,0xc1,0x00,0x00,0x00] v_bfrev_b32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb8,0xd5,0xf0,0x00,0x00,0x00] v_bfrev_b32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xb8,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_bfrev_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb8,0xd5,0xfd,0x00,0x00,0x00] v_bfrev_b32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xb8,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_bfrev_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb8,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_ceil_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdc,0xd5,0x01,0x01,0x00,0x00] v_ceil_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdc,0xd5,0xff,0x01,0x00,0x00] v_ceil_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdc,0xd5,0x01,0x00,0x00,0x00] v_ceil_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdc,0xd5,0x69,0x00,0x00,0x00] v_ceil_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdc,0xd5,0x6a,0x00,0x00,0x00] v_ceil_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdc,0xd5,0x6b,0x00,0x00,0x00] v_ceil_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdc,0xd5,0x7b,0x00,0x00,0x00] v_ceil_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdc,0xd5,0x7d,0x00,0x00,0x00] v_ceil_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdc,0xd5,0x7e,0x00,0x00,0x00] v_ceil_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdc,0xd5,0x7f,0x00,0x00,0x00] v_ceil_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, null ; encoding: [0x05,0x00,0xdc,0xd5,0x7c,0x00,0x00,0x00] v_ceil_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_ceil_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdc,0xd5,0xc1,0x00,0x00,0x00] v_ceil_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_ceil_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdc,0xd5,0xf0,0x00,0x00,0x08] v_ceil_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xdc,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_ceil_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdc,0xd5,0xfd,0x00,0x00,0x10] v_ceil_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xdc,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_ceil_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdc,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_ceil_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa2,0xd5,0x01,0x01,0x00,0x00] v_ceil_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa2,0xd5,0xff,0x01,0x00,0x00] v_ceil_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa2,0xd5,0x01,0x00,0x00,0x00] v_ceil_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa2,0xd5,0x69,0x00,0x00,0x00] v_ceil_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa2,0xd5,0x6a,0x00,0x00,0x00] v_ceil_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa2,0xd5,0x6b,0x00,0x00,0x00] v_ceil_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa2,0xd5,0x7b,0x00,0x00,0x00] v_ceil_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa2,0xd5,0x7d,0x00,0x00,0x00] v_ceil_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa2,0xd5,0x7e,0x00,0x00,0x00] v_ceil_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa2,0xd5,0x7f,0x00,0x00,0x00] v_ceil_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, null ; encoding: [0x05,0x00,0xa2,0xd5,0x7c,0x00,0x00,0x00] v_ceil_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_ceil_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa2,0xd5,0xc1,0x00,0x00,0x00] v_ceil_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_ceil_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa2,0xd5,0xf0,0x00,0x00,0x08] v_ceil_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa2,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_ceil_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa2,0xd5,0xfd,0x00,0x00,0x10] v_ceil_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa2,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_ceil_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa2,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_ceil_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x98,0xd5,0x01,0x01,0x00,0x00] v_ceil_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x98,0xd5,0xfe,0x01,0x00,0x00] v_ceil_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x98,0xd5,0x02,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x98,0xd5,0x68,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x98,0xd5,0x6a,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x98,0xd5,0x7a,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x98,0xd5,0x7e,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x98,0xd5,0x7c,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_ceil_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x98,0xd5,0xc1,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x98,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_ceil_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x98,0xd5,0xf0,0x00,0x00,0x08] v_ceil_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0x98,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_ceil_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x98,0xd5,0xfd,0x00,0x00,0x30] v_ceil_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0x98,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_ceil_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x98,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cls_i32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, v1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] v_cls_i32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, v255 ; encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] v_cls_i32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, s1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] v_cls_i32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, s105 ; encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] v_cls_i32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] v_cls_i32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] v_cls_i32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] v_cls_i32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, m0 ; encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] v_cls_i32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] v_cls_i32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] v_cls_i32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, null ; encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] v_cls_i32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, -1 ; encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] v_cls_i32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] v_cls_i32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, src_scc ; encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] v_cls_i32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_cls_i32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_clz_i32_u32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, v1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] v_clz_i32_u32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, v255 ; encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] v_clz_i32_u32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, s1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, s105 ; encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, m0 ; encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, null ; encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, -1 ; encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] v_clz_i32_u32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_clz_i32_u32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cos_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xe1,0xd5,0x01,0x01,0x00,0x00] v_cos_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xe1,0xd5,0xff,0x01,0x00,0x00] v_cos_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xe1,0xd5,0x01,0x00,0x00,0x00] v_cos_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xe1,0xd5,0x69,0x00,0x00,0x00] v_cos_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe1,0xd5,0x6a,0x00,0x00,0x00] v_cos_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe1,0xd5,0x6b,0x00,0x00,0x00] v_cos_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe1,0xd5,0x7b,0x00,0x00,0x00] v_cos_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xe1,0xd5,0x7d,0x00,0x00,0x00] v_cos_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe1,0xd5,0x7e,0x00,0x00,0x00] v_cos_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe1,0xd5,0x7f,0x00,0x00,0x00] v_cos_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, null ; encoding: [0x05,0x00,0xe1,0xd5,0x7c,0x00,0x00,0x00] v_cos_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cos_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xe1,0xd5,0xc1,0x00,0x00,0x00] v_cos_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cos_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xe1,0xd5,0xf0,0x00,0x00,0x08] v_cos_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xe1,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cos_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xe1,0xd5,0xfd,0x00,0x00,0x10] v_cos_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xe1,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_cos_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xe1,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_cos_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xb6,0xd5,0x01,0x01,0x00,0x00] v_cos_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xb6,0xd5,0xff,0x01,0x00,0x00] v_cos_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xb6,0xd5,0x01,0x00,0x00,0x00] v_cos_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xb6,0xd5,0x69,0x00,0x00,0x00] v_cos_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb6,0xd5,0x6a,0x00,0x00,0x00] v_cos_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb6,0xd5,0x6b,0x00,0x00,0x00] v_cos_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb6,0xd5,0x7b,0x00,0x00,0x00] v_cos_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xb6,0xd5,0x7d,0x00,0x00,0x00] v_cos_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb6,0xd5,0x7e,0x00,0x00,0x00] v_cos_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb6,0xd5,0x7f,0x00,0x00,0x00] v_cos_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, null ; encoding: [0x05,0x00,0xb6,0xd5,0x7c,0x00,0x00,0x00] v_cos_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cos_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xb6,0xd5,0xc1,0x00,0x00,0x00] v_cos_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cos_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xb6,0xd5,0xf0,0x00,0x00,0x08] v_cos_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xb6,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cos_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xb6,0xd5,0xfd,0x00,0x00,0x10] v_cos_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xb6,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_cos_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xb6,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_ctz_i32_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] v_ctz_i32_b32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] v_ctz_i32_b32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, null ; encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] v_ctz_i32_b32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_ctz_i32_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cvt_f16_f32_e64 v5.l, v1 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, v1 ; encoding: [0x05,0x00,0x8a,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_f32_e64 v5.l, v255 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, v255 ; encoding: [0x05,0x00,0x8a,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_f32_e64 v5.l, s1 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, s1 ; encoding: [0x05,0x00,0x8a,0xd5,0x01,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, s105 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, s105 ; encoding: [0x05,0x00,0x8a,0xd5,0x69,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0x8a,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0x8a,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0x8a,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, m0 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, m0 ; encoding: [0x05,0x00,0x8a,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, exec_lo -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0x8a,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, exec_hi -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0x8a,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, null -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, null ; encoding: [0x05,0x00,0x8a,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, -1 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f16_f32_e64 v5.l, -1 ; encoding: [0x05,0x00,0x8a,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5.l, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f16_f32_e64 v5.l, 0.5 mul:2 ; encoding: [0x05,0x00,0x8a,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f16_f32_e64 v5.l, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x8a,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f16_f32_e64 v5.l, src_scc mul:4 ; encoding: [0x05,0x00,0x8a,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f16_f32_e64 v255.l, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f16_f32_e64 v255.l, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_cvt_f16_f32_e64 v255.h, -|0xaf123456| clamp div:2 -// GFX11: [0xff,0xc1,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f16_f32_e64 v255.h, -|0xaf123456| op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc1,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_cvt_f16_i16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xd1,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd1,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xd1,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd1,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xd1,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd1,0xd5,0x01,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xd1,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd1,0xd5,0x69,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xd1,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd1,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xd1,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd1,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xd1,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd1,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xd1,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd1,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xd1,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd1,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xd1,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd1,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, null -// GFX11: [0x05,0x00,0xd1,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, null ; encoding: [0x05,0x00,0xd1,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xd1,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd1,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd1,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f16_i16_e64 v5.l, 0.5 mul:2 ; encoding: [0x05,0x00,0xd1,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f16_i16_e64 v5.l, src_scc mul:4 -// GFX11: [0x05,0x00,0xd1,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f16_i16_e64 v5.l, src_scc mul:4 ; encoding: [0x05,0x00,0xd1,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f16_i16_e64 v255.l, 0xfe0b clamp div:2 -// GFX11: [0xff,0x80,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v255.l, 0xfe0b clamp div:2 ; encoding: [0xff,0x80,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_i16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd1,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd1,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd1,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd1,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_i16_e64 v255.h, 0xfe0b clamp div:2 -// GFX11: [0xff,0xc0,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v255.h, 0xfe0b op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc0,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_i16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd1,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd1,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd1,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd1,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_i16_e64 v255.h, 0xfe0b clamp div:2 -// GFX11: [0xff,0xc0,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_i16_e64 v255.h, 0xfe0b op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc0,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xd0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd0,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xd0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd0,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xd0,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd0,0xd5,0x01,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xd0,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd0,0xd5,0x69,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xd0,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd0,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xd0,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd0,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xd0,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd0,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xd0,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd0,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xd0,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd0,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xd0,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd0,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, null -// GFX11: [0x05,0x00,0xd0,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, null ; encoding: [0x05,0x00,0xd0,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xd0,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd0,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd0,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f16_u16_e64 v5.l, 0.5 mul:2 ; encoding: [0x05,0x00,0xd0,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f16_u16_e64 v5.l, src_scc mul:4 -// GFX11: [0x05,0x00,0xd0,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f16_u16_e64 v5.l, src_scc mul:4 ; encoding: [0x05,0x00,0xd0,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f16_u16_e64 v255.l, 0xfe0b clamp div:2 -// GFX11: [0xff,0x80,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v255.l, 0xfe0b clamp div:2 ; encoding: [0xff,0x80,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_u16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_u16_e64 v255.h, 0xfe0b clamp div:2 -// GFX11: [0xff,0xc0,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f16_u16_e64 v255.h, 0xfe0b op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc0,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f32_f16_e64 v5, v1.l -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, v1.l ; encoding: [0x05,0x00,0x8b,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_f16_e64 v5, v255.l -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, v255.l ; encoding: [0x05,0x00,0x8b,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_f16_e64 v5, v255.h -// GFX11: [0x05,0x08,0x8b,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0x8b,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, s1 ; encoding: [0x05,0x00,0x8b,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, s105 ; encoding: [0x05,0x00,0x8b,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8b,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8b,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8b,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, m0 ; encoding: [0x05,0x00,0x8b,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8b,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8b,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, null ; encoding: [0x05,0x00,0x8b,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v5, -1 ; encoding: [0x05,0x00,0x8b,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8b,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x8b,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x8b,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0x8b,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_f32_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0x8b,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_cvt_f32_f64_e64 v5, v[1:2] -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0x8f,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_f64_e64 v5, v[254:255] -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0x8f,0xd5,0xfe,0x01,0x00,0x00] v_cvt_f32_f64_e64 v5, s[2:3] -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0x8f,0xd5,0x02,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, s[104:105] -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0x8f,0xd5,0x68,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, vcc -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0x8f,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0x8f,0xd5,0x7a,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, exec -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, exec ; encoding: [0x05,0x00,0x8f,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, null ; encoding: [0x05,0x00,0x8f,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0x8f,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x8f,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_f64_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8f,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_f64_e64 v5, -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0x8f,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_cvt_f32_f64_e64 v5, -|src_scc| mul:4 ; encoding: [0x05,0x01,0x8f,0xd5,0xfd,0x00,0x00,0x30] v_cvt_f32_f64_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x8f,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_f64_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x8f,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_i32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, v1 ; encoding: [0x05,0x00,0x85,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_i32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, v255 ; encoding: [0x05,0x00,0x85,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_i32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, s1 ; encoding: [0x05,0x00,0x85,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, s105 ; encoding: [0x05,0x00,0x85,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x85,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x85,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x85,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, m0 ; encoding: [0x05,0x00,0x85,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x85,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x85,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, null ; encoding: [0x05,0x00,0x85,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_i32_e64 v5, -1 ; encoding: [0x05,0x00,0x85,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_i32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x85,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_i32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x85,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_i32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x85,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_i32_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x85,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_i32_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x85,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_u32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, v1 ; encoding: [0x05,0x00,0x86,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_u32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, v255 ; encoding: [0x05,0x00,0x86,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_u32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, s1 ; encoding: [0x05,0x00,0x86,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, s105 ; encoding: [0x05,0x00,0x86,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x86,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x86,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x86,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, m0 ; encoding: [0x05,0x00,0x86,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x86,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x86,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, null ; encoding: [0x05,0x00,0x86,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_u32_e64 v5, -1 ; encoding: [0x05,0x00,0x86,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_u32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x86,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_u32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x86,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_u32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x86,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_u32_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x86,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_u32_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x86,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte0_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, v1 ; encoding: [0x05,0x00,0x91,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, v255 ; encoding: [0x05,0x00,0x91,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, s1 ; encoding: [0x05,0x00,0x91,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, s105 ; encoding: [0x05,0x00,0x91,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x91,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x91,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x91,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, m0 ; encoding: [0x05,0x00,0x91,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, exec_lo ; encoding: [0x05,0x00,0x91,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, exec_hi ; encoding: [0x05,0x00,0x91,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, null ; encoding: [0x05,0x00,0x91,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte0_e64 v5, -1 ; encoding: [0x05,0x00,0x91,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_ubyte0_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x91,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte0_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x91,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_ubyte0_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x91,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte0_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x91,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte0_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x91,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte1_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, v1 ; encoding: [0x05,0x00,0x92,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, v255 ; encoding: [0x05,0x00,0x92,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, s1 ; encoding: [0x05,0x00,0x92,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, s105 ; encoding: [0x05,0x00,0x92,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x92,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x92,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x92,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, m0 ; encoding: [0x05,0x00,0x92,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, exec_lo ; encoding: [0x05,0x00,0x92,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, exec_hi ; encoding: [0x05,0x00,0x92,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, null ; encoding: [0x05,0x00,0x92,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte1_e64 v5, -1 ; encoding: [0x05,0x00,0x92,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_ubyte1_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x92,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte1_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x92,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_ubyte1_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x92,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte1_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x92,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte1_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x92,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte2_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, v1 ; encoding: [0x05,0x00,0x93,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, v255 ; encoding: [0x05,0x00,0x93,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, s1 ; encoding: [0x05,0x00,0x93,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, s105 ; encoding: [0x05,0x00,0x93,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x93,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x93,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x93,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, m0 ; encoding: [0x05,0x00,0x93,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, exec_lo ; encoding: [0x05,0x00,0x93,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, exec_hi ; encoding: [0x05,0x00,0x93,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, null ; encoding: [0x05,0x00,0x93,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte2_e64 v5, -1 ; encoding: [0x05,0x00,0x93,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_ubyte2_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x93,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte2_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x93,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_ubyte2_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x93,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte2_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x93,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte2_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x93,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte3_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, v1 ; encoding: [0x05,0x00,0x94,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, v255 ; encoding: [0x05,0x00,0x94,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, s1 ; encoding: [0x05,0x00,0x94,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, s105 ; encoding: [0x05,0x00,0x94,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x94,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x94,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x94,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, m0 ; encoding: [0x05,0x00,0x94,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, exec_lo ; encoding: [0x05,0x00,0x94,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, exec_hi ; encoding: [0x05,0x00,0x94,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, null ; encoding: [0x05,0x00,0x94,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f32_ubyte3_e64 v5, -1 ; encoding: [0x05,0x00,0x94,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f32_ubyte3_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x94,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte3_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x94,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f32_ubyte3_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x94,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte3_e64 v255, 0xaf123456 clamp div:2 -// GFX11: encoding: [0xff,0x80,0x94,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f32_ubyte3_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x94,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f64_f32_e64 v[5:6], v1 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], v1 ; encoding: [0x05,0x00,0x90,0xd5,0x01,0x01,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], v255 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], v255 ; encoding: [0x05,0x00,0x90,0xd5,0xff,0x01,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], s1 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], s1 ; encoding: [0x05,0x00,0x90,0xd5,0x01,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], s105 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], s105 ; encoding: [0x05,0x00,0x90,0xd5,0x69,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], vcc_lo -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], vcc_lo ; encoding: [0x05,0x00,0x90,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], vcc_hi -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], vcc_hi ; encoding: [0x05,0x00,0x90,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], ttmp15 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], ttmp15 ; encoding: [0x05,0x00,0x90,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], m0 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], m0 ; encoding: [0x05,0x00,0x90,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], exec_lo -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], exec_lo ; encoding: [0x05,0x00,0x90,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], exec_hi -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], exec_hi ; encoding: [0x05,0x00,0x90,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], null ; encoding: [0x05,0x00,0x90,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f64_f32_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x90,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f64_f32_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x90,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f64_f32_e64 v[5:6], src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x90,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f64_f32_e64 v[5:6], src_scc mul:4 ; encoding: [0x05,0x00,0x90,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f64_f32_e64 v[254:255], -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xfe,0x81,0x90,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f64_f32_e64 v[254:255], -|0xaf123456| clamp div:2 ; encoding: [0xfe,0x81,0x90,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_cvt_f64_i32_e64 v[5:6], v1 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], v1 ; encoding: [0x05,0x00,0x84,0xd5,0x01,0x01,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], v255 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], v255 ; encoding: [0x05,0x00,0x84,0xd5,0xff,0x01,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], s1 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], s1 ; encoding: [0x05,0x00,0x84,0xd5,0x01,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], s105 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], s105 ; encoding: [0x05,0x00,0x84,0xd5,0x69,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], vcc_lo -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], vcc_lo ; encoding: [0x05,0x00,0x84,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], vcc_hi -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], vcc_hi ; encoding: [0x05,0x00,0x84,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], ttmp15 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], ttmp15 ; encoding: [0x05,0x00,0x84,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], m0 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], m0 ; encoding: [0x05,0x00,0x84,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], exec_lo -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], exec_lo ; encoding: [0x05,0x00,0x84,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], exec_hi -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], exec_hi ; encoding: [0x05,0x00,0x84,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], null ; encoding: [0x05,0x00,0x84,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f64_i32_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x84,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f64_i32_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x84,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f64_i32_e64 v[5:6], src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x84,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f64_i32_e64 v[5:6], src_scc mul:4 ; encoding: [0x05,0x00,0x84,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f64_i32_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0x84,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f64_i32_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x84,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f64_u32_e64 v[5:6], v1 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], v1 ; encoding: [0x05,0x00,0x96,0xd5,0x01,0x01,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], v255 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], v255 ; encoding: [0x05,0x00,0x96,0xd5,0xff,0x01,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], s1 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], s1 ; encoding: [0x05,0x00,0x96,0xd5,0x01,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], s105 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], s105 ; encoding: [0x05,0x00,0x96,0xd5,0x69,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], vcc_lo -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], vcc_lo ; encoding: [0x05,0x00,0x96,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], vcc_hi -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], vcc_hi ; encoding: [0x05,0x00,0x96,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], ttmp15 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], ttmp15 ; encoding: [0x05,0x00,0x96,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], m0 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], m0 ; encoding: [0x05,0x00,0x96,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], exec_lo -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], exec_lo ; encoding: [0x05,0x00,0x96,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], exec_hi -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], exec_hi ; encoding: [0x05,0x00,0x96,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], null ; encoding: [0x05,0x00,0x96,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_f64_u32_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x96,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_f64_u32_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x96,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f64_u32_e64 v[5:6], src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x96,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_f64_u32_e64 v[5:6], src_scc mul:4 ; encoding: [0x05,0x00,0x96,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f64_u32_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0x96,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_f64_u32_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x96,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_floor_i32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v255, -|0xaf123456| -// GFX11: encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_floor_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_flr_i32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_floor_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v255, -|0xaf123456| -// GFX11: encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_floor_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_i16_f16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xd3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd3,0xd5,0x01,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xd3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd3,0xd5,0xff,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xd3,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd3,0xd5,0x01,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xd3,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd3,0xd5,0x69,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xd3,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd3,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xd3,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd3,0xd5,0x6b,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xd3,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd3,0xd5,0x7b,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xd3,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd3,0xd5,0x7d,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xd3,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd3,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xd3,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd3,0xd5,0x7f,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, null -// GFX11: [0x05,0x00,0xd3,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xd3,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xd3,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd3,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, 0.5 -// GFX11: [0x05,0x00,0xd3,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xd3,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, src_scc -// GFX11: [0x05,0x00,0xd3,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xd3,0xd5,0xfd,0x00,0x00,0x00] v_cvt_i16_f16_e64 v255.l, -|0xfe0b| clamp -// GFX11: [0xff,0x81,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v255.l, -|0xfe0b| clamp ; encoding: [0xff,0x81,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_i16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd3,0xd5,0x01,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd3,0xd5,0xff,0x01,0x00,0x00] v_cvt_i16_f16_e64 v255.h, -|0xfe0b| clamp -// GFX11: [0xff,0xc1,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] clamp ; encoding: [0xff,0xc1,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_i16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd3,0xd5,0x01,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd3,0xd5,0xff,0x01,0x00,0x00] v_cvt_i16_f16_e64 v255.h, -|0xfe0b| clamp -// GFX11: [0xff,0xc1,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] clamp ; encoding: [0xff,0xc1,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_i32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x88,0xd5,0x01,0x01,0x00,0x00] v_cvt_i32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x88,0xd5,0xff,0x01,0x00,0x00] v_cvt_i32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x88,0xd5,0x01,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x88,0xd5,0x69,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x88,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x88,0xd5,0x6b,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x88,0xd5,0x7b,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x88,0xd5,0x7d,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x88,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x88,0xd5,0x7f,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x88,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x88,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x88,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x88,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x88,0xd5,0xfd,0x00,0x00,0x00] v_cvt_i32_f32_e64 v255, -|0xaf123456| clamp -// GFX11: encoding: [0xff,0x81,0x88,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_i32_f32_e64 v255, -|0xaf123456| clamp ; encoding: [0xff,0x81,0x88,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_i32_f64_e64 v5, v[1:2] -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0x83,0xd5,0x01,0x01,0x00,0x00] v_cvt_i32_f64_e64 v5, v[254:255] -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0x83,0xd5,0xfe,0x01,0x00,0x00] v_cvt_i32_f64_e64 v5, s[2:3] -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0x83,0xd5,0x02,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, s[104:105] -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0x83,0xd5,0x68,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, vcc -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0x83,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0x83,0xd5,0x7a,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, exec -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, exec ; encoding: [0x05,0x00,0x83,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, null ; encoding: [0x05,0x00,0x83,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0x83,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x83,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_i32_f64_e64 v5, 0.5 ; encoding: [0x05,0x00,0x83,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, -|src_scc| -// GFX11: encoding: [0x05,0x01,0x83,0xd5,0xfd,0x00,0x00,0x20] +// GFX11: v_cvt_i32_f64_e64 v5, -|src_scc| ; encoding: [0x05,0x01,0x83,0xd5,0xfd,0x00,0x00,0x20] v_cvt_i32_f64_e64 v255, 0xaf123456 clamp -// GFX11: encoding: [0xff,0x80,0x83,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_i32_f64_e64 v255, 0xaf123456 clamp ; encoding: [0xff,0x80,0x83,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cvt_i32_i16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, v1 ; encoding: [0x05,0x00,0xea,0xd5,0x01,0x01,0x00,0x00] v_cvt_i32_i16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, v255 ; encoding: [0x05,0x00,0xea,0xd5,0xff,0x01,0x00,0x00] v_cvt_i32_i16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, s1 ; encoding: [0x05,0x00,0xea,0xd5,0x01,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, s105 ; encoding: [0x05,0x00,0xea,0xd5,0x69,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xea,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xea,0xd5,0x6b,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xea,0xd5,0x7b,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, m0 ; encoding: [0x05,0x00,0xea,0xd5,0x7d,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xea,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xea,0xd5,0x7f,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, null ; encoding: [0x05,0x00,0xea,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, -1 ; encoding: [0x05,0x00,0xea,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xea,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xea,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v5, src_scc ; encoding: [0x05,0x00,0xea,0xd5,0xfd,0x00,0x00,0x00] v_cvt_i32_i16_e64 v255, 0xfe0b -// GFX11: encoding: [0xff,0x00,0xea,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_i32_i16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xea,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v255, -|0xaf123456| -// GFX11: encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_nearest_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_norm_i16_f16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xe3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xe3,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xe3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xe3,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xe3,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xe3,0xd5,0x01,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xe3,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xe3,0xd5,0x69,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xe3,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xe3,0xd5,0x6a,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xe3,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xe3,0xd5,0x6b,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xe3,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xe3,0xd5,0x7b,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xe3,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xe3,0xd5,0x7d,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xe3,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xe3,0xd5,0x7e,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xe3,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xe3,0xd5,0x7f,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, null -// GFX11: [0x05,0x00,0xe3,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xe3,0xd5,0x7c,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xe3,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xe3,0xd5,0xc1,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, 0.5 -// GFX11: [0x05,0x00,0xe3,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xe3,0xd5,0xf0,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, src_scc -// GFX11: [0x05,0x00,0xe3,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xe3,0xd5,0xfd,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v255.l, -|0xfe0b| -// GFX11: [0xff,0x01,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v255.l, -|0xfe0b| ; encoding: [0xff,0x01,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xe3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xe3,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xe3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xe3,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v255.h, -|0xfe0b| -// GFX11: [0xff,0x41,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xe3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xe3,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xe3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xe3,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v255.h, -|0xfe0b| -// GFX11: [0xff,0x41,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xe4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xe4,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xe4,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xe4,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xe4,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xe4,0xd5,0x01,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xe4,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xe4,0xd5,0x69,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xe4,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xe4,0xd5,0x6a,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xe4,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xe4,0xd5,0x6b,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xe4,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xe4,0xd5,0x7b,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xe4,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xe4,0xd5,0x7d,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xe4,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xe4,0xd5,0x7e,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xe4,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xe4,0xd5,0x7f,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, null -// GFX11: [0x05,0x00,0xe4,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xe4,0xd5,0x7c,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xe4,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xe4,0xd5,0xc1,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, 0.5 -// GFX11: [0x05,0x00,0xe4,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xe4,0xd5,0xf0,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, src_scc -// GFX11: [0x05,0x00,0xe4,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xe4,0xd5,0xfd,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v255.l, -|0xfe0b| -// GFX11: [0xff,0x01,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v255.l, -|0xfe0b| ; encoding: [0xff,0x01,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xe4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xe4,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xe4,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xe4,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v255.h, -|0xfe0b| -// GFX11: [0xff,0x41,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xe4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xe4,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xe4,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xe4,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v255.h, -|0xfe0b| -// GFX11: [0xff,0x41,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_norm_u16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_off_f32_i4_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, v1 ; encoding: [0x05,0x00,0x8e,0xd5,0x01,0x01,0x00,0x00] v_cvt_off_f32_i4_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, v255 ; encoding: [0x05,0x00,0x8e,0xd5,0xff,0x01,0x00,0x00] v_cvt_off_f32_i4_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, s1 ; encoding: [0x05,0x00,0x8e,0xd5,0x01,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, s105 ; encoding: [0x05,0x00,0x8e,0xd5,0x69,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8e,0xd5,0x6a,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8e,0xd5,0x6b,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8e,0xd5,0x7b,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, m0 ; encoding: [0x05,0x00,0x8e,0xd5,0x7d,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8e,0xd5,0x7e,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8e,0xd5,0x7f,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, null ; encoding: [0x05,0x00,0x8e,0xd5,0x7c,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v5, -1 ; encoding: [0x05,0x00,0x8e,0xd5,0xc1,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_cvt_off_f32_i4_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8e,0xd5,0xf0,0x00,0x00,0x08] v_cvt_off_f32_i4_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0x8e,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_cvt_off_f32_i4_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x8e,0xd5,0xfd,0x00,0x00,0x10] v_cvt_off_f32_i4_e64 v255, 0x4f clamp div:2 -// GFX11: encoding: [0xff,0x80,0x8e,0xd5,0xff,0x00,0x00,0x18,0x4f,0x00,0x00,0x00] +// GFX11: v_cvt_off_f32_i4_e64 v255, 0x4f clamp div:2 ; encoding: [0xff,0x80,0x8e,0xd5,0xff,0x00,0x00,0x18,0x4f,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_nearest_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v255, -|0xaf123456| -// GFX11: encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_nearest_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_u16_f16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xd2,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd2,0xd5,0x01,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xd2,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd2,0xd5,0xff,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xd2,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd2,0xd5,0x01,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xd2,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd2,0xd5,0x69,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xd2,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd2,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xd2,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd2,0xd5,0x6b,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xd2,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd2,0xd5,0x7b,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xd2,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd2,0xd5,0x7d,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xd2,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd2,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xd2,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd2,0xd5,0x7f,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, null -// GFX11: [0x05,0x00,0xd2,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xd2,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xd2,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd2,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, 0.5 -// GFX11: [0x05,0x00,0xd2,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xd2,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, src_scc -// GFX11: [0x05,0x00,0xd2,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xd2,0xd5,0xfd,0x00,0x00,0x00] v_cvt_u16_f16_e64 v255.l, -|0xfe0b| clamp -// GFX11: [0xff,0x81,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v255.l, -|0xfe0b| clamp ; encoding: [0xff,0x81,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_u16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd2,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd2,0xd5,0x01,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd2,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd2,0xd5,0xff,0x01,0x00,0x00] v_cvt_u16_f16_e64 v255.h, -|0xfe0b| clamp -// GFX11: [0xff,0xc1,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] clamp ; encoding: [0xff,0xc1,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_u16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xd2,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd2,0xd5,0x01,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xd2,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd2,0xd5,0xff,0x01,0x00,0x00] v_cvt_u16_f16_e64 v255.h, -|0xfe0b| clamp -// GFX11: [0xff,0xc1,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_u16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] clamp ; encoding: [0xff,0xc1,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_u32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x87,0xd5,0x01,0x01,0x00,0x00] v_cvt_u32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x87,0xd5,0xff,0x01,0x00,0x00] v_cvt_u32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x87,0xd5,0x01,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x87,0xd5,0x69,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x87,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x87,0xd5,0x6b,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x87,0xd5,0x7b,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x87,0xd5,0x7d,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x87,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x87,0xd5,0x7f,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, null ; encoding: [0x05,0x00,0x87,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x87,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x87,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x87,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x87,0xd5,0xfd,0x00,0x00,0x00] v_cvt_u32_f32_e64 v255, -|0xaf123456| clamp -// GFX11: encoding: [0xff,0x81,0x87,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_u32_f32_e64 v255, -|0xaf123456| clamp ; encoding: [0xff,0x81,0x87,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_u32_f64_e64 v5, v[1:2] -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0x95,0xd5,0x01,0x01,0x00,0x00] v_cvt_u32_f64_e64 v5, v[254:255] -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0x95,0xd5,0xfe,0x01,0x00,0x00] v_cvt_u32_f64_e64 v5, s[2:3] -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0x95,0xd5,0x02,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, s[104:105] -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0x95,0xd5,0x68,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, vcc -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0x95,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0x95,0xd5,0x7a,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, exec -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, exec ; encoding: [0x05,0x00,0x95,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, null ; encoding: [0x05,0x00,0x95,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0x95,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x95,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_u32_f64_e64 v5, 0.5 ; encoding: [0x05,0x00,0x95,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, -|src_scc| -// GFX11: encoding: [0x05,0x01,0x95,0xd5,0xfd,0x00,0x00,0x20] +// GFX11: v_cvt_u32_f64_e64 v5, -|src_scc| ; encoding: [0x05,0x01,0x95,0xd5,0xfd,0x00,0x00,0x20] v_cvt_u32_f64_e64 v255, 0xaf123456 clamp -// GFX11: encoding: [0xff,0x80,0x95,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_cvt_u32_f64_e64 v255, 0xaf123456 clamp ; encoding: [0xff,0x80,0x95,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cvt_u32_u16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, v1 ; encoding: [0x05,0x00,0xeb,0xd5,0x01,0x01,0x00,0x00] v_cvt_u32_u16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, v255 ; encoding: [0x05,0x00,0xeb,0xd5,0xff,0x01,0x00,0x00] v_cvt_u32_u16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, s1 ; encoding: [0x05,0x00,0xeb,0xd5,0x01,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, s105 ; encoding: [0x05,0x00,0xeb,0xd5,0x69,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xeb,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xeb,0xd5,0x6b,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xeb,0xd5,0x7b,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, m0 ; encoding: [0x05,0x00,0xeb,0xd5,0x7d,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xeb,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xeb,0xd5,0x7f,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, null ; encoding: [0x05,0x00,0xeb,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, -1 ; encoding: [0x05,0x00,0xeb,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xeb,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xeb,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v5, src_scc ; encoding: [0x05,0x00,0xeb,0xd5,0xfd,0x00,0x00,0x00] v_cvt_u32_u16_e64 v255, 0xfe0b -// GFX11: encoding: [0xff,0x00,0xeb,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX11: v_cvt_u32_u16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xeb,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_exp_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd8,0xd5,0x01,0x01,0x00,0x00] v_exp_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd8,0xd5,0xff,0x01,0x00,0x00] v_exp_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd8,0xd5,0x01,0x00,0x00,0x00] v_exp_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd8,0xd5,0x69,0x00,0x00,0x00] v_exp_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd8,0xd5,0x6a,0x00,0x00,0x00] v_exp_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd8,0xd5,0x6b,0x00,0x00,0x00] v_exp_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd8,0xd5,0x7b,0x00,0x00,0x00] v_exp_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd8,0xd5,0x7d,0x00,0x00,0x00] v_exp_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd8,0xd5,0x7e,0x00,0x00,0x00] v_exp_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd8,0xd5,0x7f,0x00,0x00,0x00] v_exp_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, null ; encoding: [0x05,0x00,0xd8,0xd5,0x7c,0x00,0x00,0x00] v_exp_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_exp_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd8,0xd5,0xc1,0x00,0x00,0x00] v_exp_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_exp_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd8,0xd5,0xf0,0x00,0x00,0x08] v_exp_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xd8,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_exp_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd8,0xd5,0xfd,0x00,0x00,0x10] v_exp_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xd8,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_exp_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd8,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_exp_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa5,0xd5,0x01,0x01,0x00,0x00] v_exp_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa5,0xd5,0xff,0x01,0x00,0x00] v_exp_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa5,0xd5,0x01,0x00,0x00,0x00] v_exp_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa5,0xd5,0x69,0x00,0x00,0x00] v_exp_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa5,0xd5,0x6a,0x00,0x00,0x00] v_exp_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa5,0xd5,0x6b,0x00,0x00,0x00] v_exp_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa5,0xd5,0x7b,0x00,0x00,0x00] v_exp_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa5,0xd5,0x7d,0x00,0x00,0x00] v_exp_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa5,0xd5,0x7e,0x00,0x00,0x00] v_exp_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa5,0xd5,0x7f,0x00,0x00,0x00] v_exp_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, null ; encoding: [0x05,0x00,0xa5,0xd5,0x7c,0x00,0x00,0x00] v_exp_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_exp_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa5,0xd5,0xc1,0x00,0x00,0x00] v_exp_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_exp_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa5,0xd5,0xf0,0x00,0x00,0x08] v_exp_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa5,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_exp_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa5,0xd5,0xfd,0x00,0x00,0x10] v_exp_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_exp_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_ffbh_i32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, v1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] v_ffbh_i32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, v255 ; encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] v_ffbh_i32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, s1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] v_ffbh_i32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, s105 ; encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] v_ffbh_i32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] v_ffbh_i32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] v_ffbh_i32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] v_ffbh_i32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, m0 ; encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] v_ffbh_i32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] v_ffbh_i32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] v_ffbh_i32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, null ; encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] v_ffbh_i32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, -1 ; encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] v_ffbh_i32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] v_ffbh_i32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_cls_i32_e64 v5, src_scc ; encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] v_ffbh_i32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_cls_i32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_ffbh_u32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, v1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] v_ffbh_u32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, v255 ; encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] v_ffbh_u32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, s1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] v_ffbh_u32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, s105 ; encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] v_ffbh_u32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] v_ffbh_u32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] v_ffbh_u32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] v_ffbh_u32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, m0 ; encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] v_ffbh_u32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] v_ffbh_u32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] v_ffbh_u32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, null ; encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] v_ffbh_u32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, -1 ; encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] v_ffbh_u32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] v_ffbh_u32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_clz_i32_u32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] v_ffbh_u32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_clz_i32_u32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_ffbl_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] v_ffbl_b32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] v_ffbl_b32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] v_ffbl_b32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] v_ffbl_b32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] v_ffbl_b32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] v_ffbl_b32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] v_ffbl_b32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] v_ffbl_b32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] v_ffbl_b32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] v_ffbl_b32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, null ; encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] v_ffbl_b32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] v_ffbl_b32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] v_ffbl_b32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_ctz_i32_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] v_ffbl_b32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_ctz_i32_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_floor_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdb,0xd5,0x01,0x01,0x00,0x00] v_floor_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdb,0xd5,0xff,0x01,0x00,0x00] v_floor_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdb,0xd5,0x01,0x00,0x00,0x00] v_floor_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdb,0xd5,0x69,0x00,0x00,0x00] v_floor_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdb,0xd5,0x6a,0x00,0x00,0x00] v_floor_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdb,0xd5,0x6b,0x00,0x00,0x00] v_floor_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdb,0xd5,0x7b,0x00,0x00,0x00] v_floor_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdb,0xd5,0x7d,0x00,0x00,0x00] v_floor_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdb,0xd5,0x7e,0x00,0x00,0x00] v_floor_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdb,0xd5,0x7f,0x00,0x00,0x00] v_floor_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, null ; encoding: [0x05,0x00,0xdb,0xd5,0x7c,0x00,0x00,0x00] v_floor_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_floor_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdb,0xd5,0xc1,0x00,0x00,0x00] v_floor_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_floor_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdb,0xd5,0xf0,0x00,0x00,0x08] v_floor_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xdb,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_floor_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdb,0xd5,0xfd,0x00,0x00,0x10] v_floor_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xdb,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_floor_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdb,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_floor_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa4,0xd5,0x01,0x01,0x00,0x00] v_floor_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa4,0xd5,0xff,0x01,0x00,0x00] v_floor_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa4,0xd5,0x01,0x00,0x00,0x00] v_floor_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa4,0xd5,0x69,0x00,0x00,0x00] v_floor_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa4,0xd5,0x6a,0x00,0x00,0x00] v_floor_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa4,0xd5,0x6b,0x00,0x00,0x00] v_floor_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa4,0xd5,0x7b,0x00,0x00,0x00] v_floor_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa4,0xd5,0x7d,0x00,0x00,0x00] v_floor_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa4,0xd5,0x7e,0x00,0x00,0x00] v_floor_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa4,0xd5,0x7f,0x00,0x00,0x00] v_floor_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, null ; encoding: [0x05,0x00,0xa4,0xd5,0x7c,0x00,0x00,0x00] v_floor_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_floor_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa4,0xd5,0xc1,0x00,0x00,0x00] v_floor_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_floor_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa4,0xd5,0xf0,0x00,0x00,0x08] v_floor_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa4,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_floor_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa4,0xd5,0xfd,0x00,0x00,0x10] v_floor_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa4,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_floor_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa4,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_floor_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x9a,0xd5,0x01,0x01,0x00,0x00] v_floor_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x9a,0xd5,0xfe,0x01,0x00,0x00] v_floor_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x9a,0xd5,0x02,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x9a,0xd5,0x68,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x9a,0xd5,0x6a,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x9a,0xd5,0x7a,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x9a,0xd5,0x7e,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x9a,0xd5,0x7c,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_floor_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x9a,0xd5,0xc1,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x9a,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_floor_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x9a,0xd5,0xf0,0x00,0x00,0x08] v_floor_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0x9a,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_floor_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x9a,0xd5,0xfd,0x00,0x00,0x30] v_floor_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0x9a,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_floor_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x9a,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_fract_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdf,0xd5,0x01,0x01,0x00,0x00] v_fract_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdf,0xd5,0xff,0x01,0x00,0x00] v_fract_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdf,0xd5,0x01,0x00,0x00,0x00] v_fract_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdf,0xd5,0x69,0x00,0x00,0x00] v_fract_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdf,0xd5,0x6a,0x00,0x00,0x00] v_fract_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdf,0xd5,0x6b,0x00,0x00,0x00] v_fract_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdf,0xd5,0x7b,0x00,0x00,0x00] v_fract_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdf,0xd5,0x7d,0x00,0x00,0x00] v_fract_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdf,0xd5,0x7e,0x00,0x00,0x00] v_fract_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdf,0xd5,0x7f,0x00,0x00,0x00] v_fract_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, null ; encoding: [0x05,0x00,0xdf,0xd5,0x7c,0x00,0x00,0x00] v_fract_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_fract_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdf,0xd5,0xc1,0x00,0x00,0x00] v_fract_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_fract_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdf,0xd5,0xf0,0x00,0x00,0x08] v_fract_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xdf,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_fract_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdf,0xd5,0xfd,0x00,0x00,0x10] v_fract_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xdf,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_fract_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdf,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_fract_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa0,0xd5,0x01,0x01,0x00,0x00] v_fract_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa0,0xd5,0xff,0x01,0x00,0x00] v_fract_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa0,0xd5,0x01,0x00,0x00,0x00] v_fract_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa0,0xd5,0x69,0x00,0x00,0x00] v_fract_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa0,0xd5,0x6a,0x00,0x00,0x00] v_fract_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa0,0xd5,0x6b,0x00,0x00,0x00] v_fract_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa0,0xd5,0x7b,0x00,0x00,0x00] v_fract_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa0,0xd5,0x7d,0x00,0x00,0x00] v_fract_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa0,0xd5,0x7e,0x00,0x00,0x00] v_fract_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa0,0xd5,0x7f,0x00,0x00,0x00] v_fract_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, null ; encoding: [0x05,0x00,0xa0,0xd5,0x7c,0x00,0x00,0x00] v_fract_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_fract_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa0,0xd5,0xc1,0x00,0x00,0x00] v_fract_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_fract_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa0,0xd5,0xf0,0x00,0x00,0x08] v_fract_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa0,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_fract_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa0,0xd5,0xfd,0x00,0x00,0x10] v_fract_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_fract_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_fract_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xbe,0xd5,0x01,0x01,0x00,0x00] v_fract_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xbe,0xd5,0xfe,0x01,0x00,0x00] v_fract_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xbe,0xd5,0x02,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xbe,0xd5,0x68,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xbe,0xd5,0x6a,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xbe,0xd5,0x7a,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xbe,0xd5,0x7e,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xbe,0xd5,0x7c,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_fract_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xbe,0xd5,0xc1,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xbe,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_fract_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xbe,0xd5,0xf0,0x00,0x00,0x08] v_fract_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0xbe,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_fract_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xbe,0xd5,0xfd,0x00,0x00,0x30] v_fract_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0xbe,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_fract_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xbe,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_frexp_exp_i16_f16_e64 v5.l, v1.l -// GFX11: [0x05,0x00,0xda,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xda,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, v255.l -// GFX11: [0x05,0x00,0xda,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xda,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, s1 -// GFX11: [0x05,0x00,0xda,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xda,0xd5,0x01,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, s105 -// GFX11: [0x05,0x00,0xda,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xda,0xd5,0x69,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, vcc_lo -// GFX11: [0x05,0x00,0xda,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xda,0xd5,0x6a,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, vcc_hi -// GFX11: [0x05,0x00,0xda,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xda,0xd5,0x6b,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, ttmp15 -// GFX11: [0x05,0x00,0xda,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xda,0xd5,0x7b,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, m0 -// GFX11: [0x05,0x00,0xda,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xda,0xd5,0x7d,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, exec_lo -// GFX11: [0x05,0x00,0xda,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xda,0xd5,0x7e,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, exec_hi -// GFX11: [0x05,0x00,0xda,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xda,0xd5,0x7f,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, null -// GFX11: [0x05,0x00,0xda,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xda,0xd5,0x7c,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, -1 -// GFX11: [0x05,0x00,0xda,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xda,0xd5,0xc1,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, 0.5 -// GFX11: [0x05,0x00,0xda,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xda,0xd5,0xf0,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, src_scc -// GFX11: [0x05,0x00,0xda,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xda,0xd5,0xfd,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v255.l, -|0xfe0b| -// GFX11: [0xff,0x01,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v255.l, -|0xfe0b| ; encoding: [0xff,0x01,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xda,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xda,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xda,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xda,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v255.h, -|0xfe0b| -// GFX11: [0xff,0x41,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.h, v1.h -// GFX11: [0x05,0x48,0xda,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xda,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, v255.h -// GFX11: [0x05,0x08,0xda,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xda,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v255.h, -|0xfe0b| -// GFX11: [0xff,0x41,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX11: v_frexp_exp_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xbf,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xbf,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xbf,0xd5,0x01,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xbf,0xd5,0x69,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xbf,0xd5,0x6a,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xbf,0xd5,0x6b,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xbf,0xd5,0x7b,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xbf,0xd5,0x7d,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xbf,0xd5,0x7e,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xbf,0xd5,0x7f,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0xbf,0xd5,0x7c,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xbf,0xd5,0xc1,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbf,0xd5,0xf0,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xbf,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0xbf,0xd5,0xfd,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v255, -|0xaf123456| -// GFX11: encoding: [0xff,0x01,0xbf,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_exp_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0xbf,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_frexp_exp_i32_f64_e64 v5, v[1:2] -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0xbc,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, v[254:255] -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0xbc,0xd5,0xfe,0x01,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, s[2:3] -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0xbc,0xd5,0x02,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, s[104:105] -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0xbc,0xd5,0x68,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, vcc -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0xbc,0xd5,0x6a,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0xbc,0xd5,0x7a,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, exec -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, exec ; encoding: [0x05,0x00,0xbc,0xd5,0x7e,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, null ; encoding: [0x05,0x00,0xbc,0xd5,0x7c,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0xbc,0xd5,0xc1,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xbc,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_frexp_exp_i32_f64_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbc,0xd5,0xf0,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, -|src_scc| -// GFX11: encoding: [0x05,0x01,0xbc,0xd5,0xfd,0x00,0x00,0x20] +// GFX11: v_frexp_exp_i32_f64_e64 v5, -|src_scc| ; encoding: [0x05,0x01,0xbc,0xd5,0xfd,0x00,0x00,0x20] v_frexp_exp_i32_f64_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xbc,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_exp_i32_f64_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xbc,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_frexp_mant_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd9,0xd5,0x01,0x01,0x00,0x00] v_frexp_mant_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd9,0xd5,0xff,0x01,0x00,0x00] v_frexp_mant_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd9,0xd5,0x01,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd9,0xd5,0x69,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd9,0xd5,0x6a,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd9,0xd5,0x6b,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd9,0xd5,0x7b,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd9,0xd5,0x7d,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd9,0xd5,0x7e,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd9,0xd5,0x7f,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, null ; encoding: [0x05,0x00,0xd9,0xd5,0x7c,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd9,0xd5,0xc1,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_frexp_mant_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd9,0xd5,0xf0,0x00,0x00,0x08] v_frexp_mant_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xd9,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_frexp_mant_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd9,0xd5,0xfd,0x00,0x00,0x10] v_frexp_mant_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xd9,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_frexp_mant_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd9,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_frexp_mant_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xc0,0xd5,0x01,0x01,0x00,0x00] v_frexp_mant_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xc0,0xd5,0xff,0x01,0x00,0x00] v_frexp_mant_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xc0,0xd5,0x01,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xc0,0xd5,0x69,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xc0,0xd5,0x6a,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xc0,0xd5,0x6b,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xc0,0xd5,0x7b,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xc0,0xd5,0x7d,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xc0,0xd5,0x7e,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xc0,0xd5,0x7f,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, null ; encoding: [0x05,0x00,0xc0,0xd5,0x7c,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xc0,0xd5,0xc1,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_frexp_mant_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xc0,0xd5,0xf0,0x00,0x00,0x08] v_frexp_mant_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xc0,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_frexp_mant_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xc0,0xd5,0xfd,0x00,0x00,0x10] v_frexp_mant_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xc0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_mant_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xc0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_frexp_mant_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xbd,0xd5,0x01,0x01,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xbd,0xd5,0xfe,0x01,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xbd,0xd5,0x02,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xbd,0xd5,0x68,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xbd,0xd5,0x6a,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xbd,0xd5,0x7a,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xbd,0xd5,0x7e,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xbd,0xd5,0x7c,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_frexp_mant_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xbd,0xd5,0xc1,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xbd,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_frexp_mant_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xbd,0xd5,0xf0,0x00,0x00,0x08] v_frexp_mant_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0xbd,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_frexp_mant_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xbd,0xd5,0xfd,0x00,0x00,0x30] v_frexp_mant_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0xbd,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_frexp_mant_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xbd,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_log_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_log_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd7,0xd5,0x01,0x01,0x00,0x00] v_log_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_log_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd7,0xd5,0xff,0x01,0x00,0x00] v_log_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd7,0xd5,0x01,0x00,0x00,0x00] v_log_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd7,0xd5,0x69,0x00,0x00,0x00] v_log_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd7,0xd5,0x6a,0x00,0x00,0x00] v_log_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd7,0xd5,0x6b,0x00,0x00,0x00] v_log_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd7,0xd5,0x7b,0x00,0x00,0x00] v_log_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd7,0xd5,0x7d,0x00,0x00,0x00] v_log_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd7,0xd5,0x7e,0x00,0x00,0x00] v_log_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd7,0xd5,0x7f,0x00,0x00,0x00] v_log_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, null ; encoding: [0x05,0x00,0xd7,0xd5,0x7c,0x00,0x00,0x00] v_log_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_log_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd7,0xd5,0xc1,0x00,0x00,0x00] v_log_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_log_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd7,0xd5,0xf0,0x00,0x00,0x08] v_log_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xd7,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_log_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd7,0xd5,0xfd,0x00,0x00,0x10] v_log_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xd7,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_log_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd7,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_log_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_log_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa7,0xd5,0x01,0x01,0x00,0x00] v_log_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_log_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa7,0xd5,0xff,0x01,0x00,0x00] v_log_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa7,0xd5,0x01,0x00,0x00,0x00] v_log_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa7,0xd5,0x69,0x00,0x00,0x00] v_log_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa7,0xd5,0x6a,0x00,0x00,0x00] v_log_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa7,0xd5,0x6b,0x00,0x00,0x00] v_log_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa7,0xd5,0x7b,0x00,0x00,0x00] v_log_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa7,0xd5,0x7d,0x00,0x00,0x00] v_log_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa7,0xd5,0x7e,0x00,0x00,0x00] v_log_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa7,0xd5,0x7f,0x00,0x00,0x00] v_log_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, null ; encoding: [0x05,0x00,0xa7,0xd5,0x7c,0x00,0x00,0x00] v_log_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_log_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa7,0xd5,0xc1,0x00,0x00,0x00] v_log_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_log_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa7,0xd5,0xf0,0x00,0x00,0x08] v_log_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa7,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_log_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa7,0xd5,0xfd,0x00,0x00,0x10] v_log_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa7,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_log_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa7,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_mov_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, v1 ; encoding: [0x05,0x00,0x81,0xd5,0x01,0x01,0x00,0x00] v_mov_b32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, v255 ; encoding: [0x05,0x00,0x81,0xd5,0xff,0x01,0x00,0x00] v_mov_b32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, s1 ; encoding: [0x05,0x00,0x81,0xd5,0x01,0x00,0x00,0x00] v_mov_b32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, s105 ; encoding: [0x05,0x00,0x81,0xd5,0x69,0x00,0x00,0x00] v_mov_b32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x81,0xd5,0x6a,0x00,0x00,0x00] v_mov_b32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x81,0xd5,0x6b,0x00,0x00,0x00] v_mov_b32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x81,0xd5,0x7b,0x00,0x00,0x00] v_mov_b32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, m0 ; encoding: [0x05,0x00,0x81,0xd5,0x7d,0x00,0x00,0x00] v_mov_b32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x81,0xd5,0x7e,0x00,0x00,0x00] v_mov_b32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x81,0xd5,0x7f,0x00,0x00,0x00] v_mov_b32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, null ; encoding: [0x05,0x00,0x81,0xd5,0x7c,0x00,0x00,0x00] v_mov_b32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, -1 ; encoding: [0x05,0x00,0x81,0xd5,0xc1,0x00,0x00,0x00] v_mov_b32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x81,0xd5,0xf0,0x00,0x00,0x00] v_mov_b32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0x81,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_mov_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0x81,0xd5,0xfd,0x00,0x00,0x00] v_mov_b32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0x81,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_mov_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0x81,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_movreld_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc2,0xd5,0x01,0x01,0x00,0x00] v_movreld_b32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xc2,0xd5,0xff,0x01,0x00,0x00] v_movreld_b32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xc2,0xd5,0x01,0x00,0x00,0x00] v_movreld_b32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xc2,0xd5,0x69,0x00,0x00,0x00] v_movreld_b32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xc2,0xd5,0x6a,0x00,0x00,0x00] v_movreld_b32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xc2,0xd5,0x6b,0x00,0x00,0x00] v_movreld_b32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xc2,0xd5,0x7b,0x00,0x00,0x00] v_movreld_b32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xc2,0xd5,0x7d,0x00,0x00,0x00] v_movreld_b32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xc2,0xd5,0x7e,0x00,0x00,0x00] v_movreld_b32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xc2,0xd5,0x7f,0x00,0x00,0x00] v_movreld_b32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, null ; encoding: [0x05,0x00,0xc2,0xd5,0x7c,0x00,0x00,0x00] v_movreld_b32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xc2,0xd5,0xc1,0x00,0x00,0x00] v_movreld_b32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xc2,0xd5,0xf0,0x00,0x00,0x00] v_movreld_b32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xc2,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_movreld_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xc2,0xd5,0xfd,0x00,0x00,0x00] v_movreld_b32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xc2,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_movreld_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xc2,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_movrels_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xc3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_movrels_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc3,0xd5,0x01,0x01,0x00,0x00] v_movrels_b32_e64 v255, v255 -// GFX11: encoding: [0xff,0x00,0xc3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_movrels_b32_e64 v255, v255 ; encoding: [0xff,0x00,0xc3,0xd5,0xff,0x01,0x00,0x00] v_movrelsd_2_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xc8,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_movrelsd_2_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc8,0xd5,0x01,0x01,0x00,0x00] v_movrelsd_2_b32_e64 v255, v255 -// GFX11: encoding: [0xff,0x00,0xc8,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_movrelsd_2_b32_e64 v255, v255 ; encoding: [0xff,0x00,0xc8,0xd5,0xff,0x01,0x00,0x00] v_movrelsd_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xc4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_movrelsd_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc4,0xd5,0x01,0x01,0x00,0x00] v_movrelsd_b32_e64 v255, v255 -// GFX11: encoding: [0xff,0x00,0xc4,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_movrelsd_b32_e64 v255, v255 ; encoding: [0xff,0x00,0xc4,0xd5,0xff,0x01,0x00,0x00] v_nop_e64 -// GFX11: encoding: [0x00,0x00,0x80,0xd5,0x00,0x00,0x00,0x00] +// GFX11: v_nop ; encoding: [0x00,0x00,0x80,0xd5,0x00,0x00,0x00,0x00] v_not_b16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_not_b16_e64 v5, v1 ; encoding: [0x05,0x00,0xe9,0xd5,0x01,0x01,0x00,0x00] v_not_b16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_not_b16_e64 v5, v255 ; encoding: [0x05,0x00,0xe9,0xd5,0xff,0x01,0x00,0x00] v_not_b16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, s1 ; encoding: [0x05,0x00,0xe9,0xd5,0x01,0x00,0x00,0x00] v_not_b16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, s105 ; encoding: [0x05,0x00,0xe9,0xd5,0x69,0x00,0x00,0x00] v_not_b16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe9,0xd5,0x6a,0x00,0x00,0x00] v_not_b16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe9,0xd5,0x6b,0x00,0x00,0x00] v_not_b16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe9,0xd5,0x7b,0x00,0x00,0x00] v_not_b16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, m0 ; encoding: [0x05,0x00,0xe9,0xd5,0x7d,0x00,0x00,0x00] v_not_b16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe9,0xd5,0x7e,0x00,0x00,0x00] v_not_b16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe9,0xd5,0x7f,0x00,0x00,0x00] v_not_b16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, null ; encoding: [0x05,0x00,0xe9,0xd5,0x7c,0x00,0x00,0x00] v_not_b16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, -1 ; encoding: [0x05,0x00,0xe9,0xd5,0xc1,0x00,0x00,0x00] v_not_b16_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xe9,0xd5,0xf0,0x00,0x00,0x00] v_not_b16_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xe9,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_not_b16_e64 v5, src_scc ; encoding: [0x05,0x00,0xe9,0xd5,0xfd,0x00,0x00,0x00] v_not_b16_e64 v255, 0xfe0b -// GFX11: encoding: [0xff,0x00,0xe9,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX11: v_not_b16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xe9,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_not_b32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_not_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xb7,0xd5,0x01,0x01,0x00,0x00] v_not_b32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_not_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xb7,0xd5,0xff,0x01,0x00,0x00] v_not_b32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xb7,0xd5,0x01,0x00,0x00,0x00] v_not_b32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xb7,0xd5,0x69,0x00,0x00,0x00] v_not_b32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb7,0xd5,0x6a,0x00,0x00,0x00] v_not_b32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb7,0xd5,0x6b,0x00,0x00,0x00] v_not_b32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb7,0xd5,0x7b,0x00,0x00,0x00] v_not_b32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xb7,0xd5,0x7d,0x00,0x00,0x00] v_not_b32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb7,0xd5,0x7e,0x00,0x00,0x00] v_not_b32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb7,0xd5,0x7f,0x00,0x00,0x00] v_not_b32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, null ; encoding: [0x05,0x00,0xb7,0xd5,0x7c,0x00,0x00,0x00] v_not_b32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xb7,0xd5,0xc1,0x00,0x00,0x00] v_not_b32_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb7,0xd5,0xf0,0x00,0x00,0x00] v_not_b32_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xb7,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_not_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb7,0xd5,0xfd,0x00,0x00,0x00] v_not_b32_e64 v255, 0xaf123456 -// GFX11: encoding: [0xff,0x00,0xb7,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX11: v_not_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb7,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_pipeflush_e64 -// GFX11: encoding: [0x00,0x00,0x9b,0xd5,0x00,0x00,0x00,0x00] +// GFX11: v_pipeflush ; encoding: [0x00,0x00,0x9b,0xd5,0x00,0x00,0x00,0x00] v_rcp_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd4,0xd5,0x01,0x01,0x00,0x00] v_rcp_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd4,0xd5,0xff,0x01,0x00,0x00] v_rcp_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd4,0xd5,0x01,0x00,0x00,0x00] v_rcp_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd4,0xd5,0x69,0x00,0x00,0x00] v_rcp_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd4,0xd5,0x6a,0x00,0x00,0x00] v_rcp_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd4,0xd5,0x6b,0x00,0x00,0x00] v_rcp_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd4,0xd5,0x7b,0x00,0x00,0x00] v_rcp_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd4,0xd5,0x7d,0x00,0x00,0x00] v_rcp_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd4,0xd5,0x7e,0x00,0x00,0x00] v_rcp_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd4,0xd5,0x7f,0x00,0x00,0x00] v_rcp_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, null ; encoding: [0x05,0x00,0xd4,0xd5,0x7c,0x00,0x00,0x00] v_rcp_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rcp_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd4,0xd5,0xc1,0x00,0x00,0x00] v_rcp_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rcp_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd4,0xd5,0xf0,0x00,0x00,0x08] v_rcp_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xd4,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rcp_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd4,0xd5,0xfd,0x00,0x00,0x10] v_rcp_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xd4,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_rcp_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd4,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_rcp_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xaa,0xd5,0x01,0x01,0x00,0x00] v_rcp_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xaa,0xd5,0xff,0x01,0x00,0x00] v_rcp_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xaa,0xd5,0x01,0x00,0x00,0x00] v_rcp_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xaa,0xd5,0x69,0x00,0x00,0x00] v_rcp_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xaa,0xd5,0x6a,0x00,0x00,0x00] v_rcp_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xaa,0xd5,0x6b,0x00,0x00,0x00] v_rcp_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xaa,0xd5,0x7b,0x00,0x00,0x00] v_rcp_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xaa,0xd5,0x7d,0x00,0x00,0x00] v_rcp_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xaa,0xd5,0x7e,0x00,0x00,0x00] v_rcp_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xaa,0xd5,0x7f,0x00,0x00,0x00] v_rcp_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, null ; encoding: [0x05,0x00,0xaa,0xd5,0x7c,0x00,0x00,0x00] v_rcp_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rcp_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xaa,0xd5,0xc1,0x00,0x00,0x00] v_rcp_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rcp_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xaa,0xd5,0xf0,0x00,0x00,0x08] v_rcp_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xaa,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rcp_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xaa,0xd5,0xfd,0x00,0x00,0x10] v_rcp_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xaa,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_rcp_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xaa,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rcp_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xaf,0xd5,0x01,0x01,0x00,0x00] v_rcp_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xaf,0xd5,0xfe,0x01,0x00,0x00] v_rcp_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xaf,0xd5,0x02,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xaf,0xd5,0x68,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xaf,0xd5,0x6a,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xaf,0xd5,0x7a,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xaf,0xd5,0x7e,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xaf,0xd5,0x7c,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rcp_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xaf,0xd5,0xc1,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xaf,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rcp_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xaf,0xd5,0xf0,0x00,0x00,0x08] v_rcp_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0xaf,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_rcp_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xaf,0xd5,0xfd,0x00,0x00,0x30] v_rcp_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0xaf,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_rcp_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xaf,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_rcp_iflag_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xab,0xd5,0x01,0x01,0x00,0x00] v_rcp_iflag_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xab,0xd5,0xff,0x01,0x00,0x00] v_rcp_iflag_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xab,0xd5,0x01,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xab,0xd5,0x69,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xab,0xd5,0x6a,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xab,0xd5,0x6b,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xab,0xd5,0x7b,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xab,0xd5,0x7d,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xab,0xd5,0x7e,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xab,0xd5,0x7f,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, null ; encoding: [0x05,0x00,0xab,0xd5,0x7c,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rcp_iflag_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xab,0xd5,0xc1,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rcp_iflag_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xab,0xd5,0xf0,0x00,0x00,0x08] v_rcp_iflag_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xab,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rcp_iflag_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xab,0xd5,0xfd,0x00,0x00,0x10] v_rcp_iflag_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xab,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_rcp_iflag_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xab,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rndne_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xde,0xd5,0x01,0x01,0x00,0x00] v_rndne_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xde,0xd5,0xff,0x01,0x00,0x00] v_rndne_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xde,0xd5,0x01,0x00,0x00,0x00] v_rndne_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xde,0xd5,0x69,0x00,0x00,0x00] v_rndne_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xde,0xd5,0x6a,0x00,0x00,0x00] v_rndne_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xde,0xd5,0x6b,0x00,0x00,0x00] v_rndne_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xde,0xd5,0x7b,0x00,0x00,0x00] v_rndne_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xde,0xd5,0x7d,0x00,0x00,0x00] v_rndne_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xde,0xd5,0x7e,0x00,0x00,0x00] v_rndne_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xde,0xd5,0x7f,0x00,0x00,0x00] v_rndne_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, null ; encoding: [0x05,0x00,0xde,0xd5,0x7c,0x00,0x00,0x00] v_rndne_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rndne_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xde,0xd5,0xc1,0x00,0x00,0x00] v_rndne_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rndne_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xde,0xd5,0xf0,0x00,0x00,0x08] v_rndne_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xde,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rndne_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xde,0xd5,0xfd,0x00,0x00,0x10] v_rndne_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xde,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_rndne_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xde,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_rndne_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa3,0xd5,0x01,0x01,0x00,0x00] v_rndne_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa3,0xd5,0xff,0x01,0x00,0x00] v_rndne_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa3,0xd5,0x01,0x00,0x00,0x00] v_rndne_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa3,0xd5,0x69,0x00,0x00,0x00] v_rndne_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa3,0xd5,0x6a,0x00,0x00,0x00] v_rndne_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa3,0xd5,0x6b,0x00,0x00,0x00] v_rndne_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa3,0xd5,0x7b,0x00,0x00,0x00] v_rndne_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa3,0xd5,0x7d,0x00,0x00,0x00] v_rndne_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa3,0xd5,0x7e,0x00,0x00,0x00] v_rndne_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa3,0xd5,0x7f,0x00,0x00,0x00] v_rndne_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, null ; encoding: [0x05,0x00,0xa3,0xd5,0x7c,0x00,0x00,0x00] v_rndne_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rndne_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa3,0xd5,0xc1,0x00,0x00,0x00] v_rndne_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rndne_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa3,0xd5,0xf0,0x00,0x00,0x08] v_rndne_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa3,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rndne_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa3,0xd5,0xfd,0x00,0x00,0x10] v_rndne_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_rndne_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rndne_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x99,0xd5,0x01,0x01,0x00,0x00] v_rndne_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x99,0xd5,0xfe,0x01,0x00,0x00] v_rndne_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x99,0xd5,0x02,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x99,0xd5,0x68,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x99,0xd5,0x6a,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x99,0xd5,0x7a,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x99,0xd5,0x7e,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x99,0xd5,0x7c,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rndne_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x99,0xd5,0xc1,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x99,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rndne_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x99,0xd5,0xf0,0x00,0x00,0x08] v_rndne_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0x99,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_rndne_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x99,0xd5,0xfd,0x00,0x00,0x30] v_rndne_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0x99,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_rndne_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x99,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_rsq_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd6,0xd5,0x01,0x01,0x00,0x00] v_rsq_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd6,0xd5,0xff,0x01,0x00,0x00] v_rsq_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd6,0xd5,0x01,0x00,0x00,0x00] v_rsq_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd6,0xd5,0x69,0x00,0x00,0x00] v_rsq_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd6,0xd5,0x6a,0x00,0x00,0x00] v_rsq_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd6,0xd5,0x6b,0x00,0x00,0x00] v_rsq_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd6,0xd5,0x7b,0x00,0x00,0x00] v_rsq_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd6,0xd5,0x7d,0x00,0x00,0x00] v_rsq_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd6,0xd5,0x7e,0x00,0x00,0x00] v_rsq_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd6,0xd5,0x7f,0x00,0x00,0x00] v_rsq_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, null ; encoding: [0x05,0x00,0xd6,0xd5,0x7c,0x00,0x00,0x00] v_rsq_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rsq_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd6,0xd5,0xc1,0x00,0x00,0x00] v_rsq_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rsq_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd6,0xd5,0xf0,0x00,0x00,0x08] v_rsq_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xd6,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rsq_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd6,0xd5,0xfd,0x00,0x00,0x10] v_rsq_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xd6,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_rsq_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd6,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_rsq_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xae,0xd5,0x01,0x01,0x00,0x00] v_rsq_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xae,0xd5,0xff,0x01,0x00,0x00] v_rsq_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xae,0xd5,0x01,0x00,0x00,0x00] v_rsq_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xae,0xd5,0x69,0x00,0x00,0x00] v_rsq_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xae,0xd5,0x6a,0x00,0x00,0x00] v_rsq_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xae,0xd5,0x6b,0x00,0x00,0x00] v_rsq_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xae,0xd5,0x7b,0x00,0x00,0x00] v_rsq_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xae,0xd5,0x7d,0x00,0x00,0x00] v_rsq_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xae,0xd5,0x7e,0x00,0x00,0x00] v_rsq_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xae,0xd5,0x7f,0x00,0x00,0x00] v_rsq_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, null ; encoding: [0x05,0x00,0xae,0xd5,0x7c,0x00,0x00,0x00] v_rsq_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rsq_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xae,0xd5,0xc1,0x00,0x00,0x00] v_rsq_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rsq_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xae,0xd5,0xf0,0x00,0x00,0x08] v_rsq_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xae,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_rsq_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xae,0xd5,0xfd,0x00,0x00,0x10] v_rsq_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xae,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_rsq_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xae,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rsq_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xb1,0xd5,0x01,0x01,0x00,0x00] v_rsq_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xb1,0xd5,0xfe,0x01,0x00,0x00] v_rsq_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xb1,0xd5,0x02,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xb1,0xd5,0x68,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xb1,0xd5,0x6a,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xb1,0xd5,0x7a,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xb1,0xd5,0x7e,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xb1,0xd5,0x7c,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_rsq_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xb1,0xd5,0xc1,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xb1,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_rsq_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xb1,0xd5,0xf0,0x00,0x00,0x08] v_rsq_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0xb1,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_rsq_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xb1,0xd5,0xfd,0x00,0x00,0x30] v_rsq_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0xb1,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_rsq_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xb1,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_sat_pk_u8_i16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, v1 ; encoding: [0x05,0x00,0xe2,0xd5,0x01,0x01,0x00,0x00] v_sat_pk_u8_i16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, v255 ; encoding: [0x05,0x00,0xe2,0xd5,0xff,0x01,0x00,0x00] v_sat_pk_u8_i16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, s1 ; encoding: [0x05,0x00,0xe2,0xd5,0x01,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, s105 ; encoding: [0x05,0x00,0xe2,0xd5,0x69,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe2,0xd5,0x6a,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe2,0xd5,0x6b,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe2,0xd5,0x7b,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, m0 ; encoding: [0x05,0x00,0xe2,0xd5,0x7d,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe2,0xd5,0x7e,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe2,0xd5,0x7f,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, null ; encoding: [0x05,0x00,0xe2,0xd5,0x7c,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, -1 ; encoding: [0x05,0x00,0xe2,0xd5,0xc1,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, 0.5 -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0xf0,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xe2,0xd5,0xf0,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, src_scc -// GFX11: encoding: [0x05,0x00,0xe2,0xd5,0xfd,0x00,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v5, src_scc ; encoding: [0x05,0x00,0xe2,0xd5,0xfd,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v255, 0xfe0b -// GFX11: encoding: [0xff,0x00,0xe2,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX11: v_sat_pk_u8_i16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xe2,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_sin_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xe0,0xd5,0x01,0x01,0x00,0x00] v_sin_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xe0,0xd5,0xff,0x01,0x00,0x00] v_sin_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xe0,0xd5,0x01,0x00,0x00,0x00] v_sin_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xe0,0xd5,0x69,0x00,0x00,0x00] v_sin_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe0,0xd5,0x6a,0x00,0x00,0x00] v_sin_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe0,0xd5,0x6b,0x00,0x00,0x00] v_sin_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe0,0xd5,0x7b,0x00,0x00,0x00] v_sin_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xe0,0xd5,0x7d,0x00,0x00,0x00] v_sin_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe0,0xd5,0x7e,0x00,0x00,0x00] v_sin_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe0,0xd5,0x7f,0x00,0x00,0x00] v_sin_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, null ; encoding: [0x05,0x00,0xe0,0xd5,0x7c,0x00,0x00,0x00] v_sin_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_sin_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xe0,0xd5,0xc1,0x00,0x00,0x00] v_sin_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_sin_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xe0,0xd5,0xf0,0x00,0x00,0x08] v_sin_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xe0,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_sin_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xe0,0xd5,0xfd,0x00,0x00,0x10] v_sin_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xe0,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_sin_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xe0,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_sin_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xb5,0xd5,0x01,0x01,0x00,0x00] v_sin_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xb5,0xd5,0xff,0x01,0x00,0x00] v_sin_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xb5,0xd5,0x01,0x00,0x00,0x00] v_sin_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xb5,0xd5,0x69,0x00,0x00,0x00] v_sin_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb5,0xd5,0x6a,0x00,0x00,0x00] v_sin_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb5,0xd5,0x6b,0x00,0x00,0x00] v_sin_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb5,0xd5,0x7b,0x00,0x00,0x00] v_sin_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xb5,0xd5,0x7d,0x00,0x00,0x00] v_sin_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb5,0xd5,0x7e,0x00,0x00,0x00] v_sin_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb5,0xd5,0x7f,0x00,0x00,0x00] v_sin_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, null ; encoding: [0x05,0x00,0xb5,0xd5,0x7c,0x00,0x00,0x00] v_sin_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_sin_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xb5,0xd5,0xc1,0x00,0x00,0x00] v_sin_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_sin_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xb5,0xd5,0xf0,0x00,0x00,0x08] v_sin_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xb5,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_sin_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xb5,0xd5,0xfd,0x00,0x00,0x10] v_sin_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xb5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_sin_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xb5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_sqrt_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd5,0xd5,0x01,0x01,0x00,0x00] v_sqrt_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd5,0xd5,0xff,0x01,0x00,0x00] v_sqrt_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd5,0xd5,0x01,0x00,0x00,0x00] v_sqrt_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd5,0xd5,0x69,0x00,0x00,0x00] v_sqrt_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd5,0xd5,0x6a,0x00,0x00,0x00] v_sqrt_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd5,0xd5,0x6b,0x00,0x00,0x00] v_sqrt_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd5,0xd5,0x7b,0x00,0x00,0x00] v_sqrt_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd5,0xd5,0x7d,0x00,0x00,0x00] v_sqrt_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd5,0xd5,0x7e,0x00,0x00,0x00] v_sqrt_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd5,0xd5,0x7f,0x00,0x00,0x00] v_sqrt_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, null ; encoding: [0x05,0x00,0xd5,0xd5,0x7c,0x00,0x00,0x00] v_sqrt_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd5,0xd5,0xc1,0x00,0x00,0x00] v_sqrt_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_sqrt_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd5,0xd5,0xf0,0x00,0x00,0x08] v_sqrt_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xd5,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_sqrt_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd5,0xd5,0xfd,0x00,0x00,0x10] v_sqrt_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xd5,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_sqrt_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd5,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_sqrt_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xb3,0xd5,0x01,0x01,0x00,0x00] v_sqrt_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xb3,0xd5,0xff,0x01,0x00,0x00] v_sqrt_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xb3,0xd5,0x01,0x00,0x00,0x00] v_sqrt_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xb3,0xd5,0x69,0x00,0x00,0x00] v_sqrt_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb3,0xd5,0x6a,0x00,0x00,0x00] v_sqrt_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb3,0xd5,0x6b,0x00,0x00,0x00] v_sqrt_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb3,0xd5,0x7b,0x00,0x00,0x00] v_sqrt_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xb3,0xd5,0x7d,0x00,0x00,0x00] v_sqrt_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb3,0xd5,0x7e,0x00,0x00,0x00] v_sqrt_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb3,0xd5,0x7f,0x00,0x00,0x00] v_sqrt_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, null ; encoding: [0x05,0x00,0xb3,0xd5,0x7c,0x00,0x00,0x00] v_sqrt_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_sqrt_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xb3,0xd5,0xc1,0x00,0x00,0x00] v_sqrt_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_sqrt_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xb3,0xd5,0xf0,0x00,0x00,0x08] v_sqrt_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xb3,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_sqrt_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xb3,0xd5,0xfd,0x00,0x00,0x10] v_sqrt_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xb3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_sqrt_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xb3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_sqrt_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xb4,0xd5,0x01,0x01,0x00,0x00] v_sqrt_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xb4,0xd5,0xfe,0x01,0x00,0x00] v_sqrt_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xb4,0xd5,0x02,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xb4,0xd5,0x68,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xb4,0xd5,0x6a,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xb4,0xd5,0x7a,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xb4,0xd5,0x7e,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xb4,0xd5,0x7c,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_sqrt_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xb4,0xd5,0xc1,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xb4,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_sqrt_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xb4,0xd5,0xf0,0x00,0x00,0x08] v_sqrt_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0xb4,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_sqrt_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xb4,0xd5,0xfd,0x00,0x00,0x30] v_sqrt_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0xb4,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_sqrt_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xb4,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_trunc_f16_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdd,0xd5,0x01,0x01,0x00,0x00] v_trunc_f16_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdd,0xd5,0xff,0x01,0x00,0x00] v_trunc_f16_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdd,0xd5,0x01,0x00,0x00,0x00] v_trunc_f16_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdd,0xd5,0x69,0x00,0x00,0x00] v_trunc_f16_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdd,0xd5,0x6a,0x00,0x00,0x00] v_trunc_f16_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdd,0xd5,0x6b,0x00,0x00,0x00] v_trunc_f16_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdd,0xd5,0x7b,0x00,0x00,0x00] v_trunc_f16_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdd,0xd5,0x7d,0x00,0x00,0x00] v_trunc_f16_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdd,0xd5,0x7e,0x00,0x00,0x00] v_trunc_f16_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdd,0xd5,0x7f,0x00,0x00,0x00] v_trunc_f16_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, null ; encoding: [0x05,0x00,0xdd,0xd5,0x7c,0x00,0x00,0x00] v_trunc_f16_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_trunc_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdd,0xd5,0xc1,0x00,0x00,0x00] v_trunc_f16_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_trunc_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdd,0xd5,0xf0,0x00,0x00,0x08] v_trunc_f16_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xdd,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_trunc_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdd,0xd5,0xfd,0x00,0x00,0x10] v_trunc_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xdd,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX11: v_trunc_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdd,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_trunc_f32_e64 v5, v1 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa1,0xd5,0x01,0x01,0x00,0x00] v_trunc_f32_e64 v5, v255 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0xff,0x01,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa1,0xd5,0xff,0x01,0x00,0x00] v_trunc_f32_e64 v5, s1 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x01,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa1,0xd5,0x01,0x00,0x00,0x00] v_trunc_f32_e64 v5, s105 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x69,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa1,0xd5,0x69,0x00,0x00,0x00] v_trunc_f32_e64 v5, vcc_lo -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa1,0xd5,0x6a,0x00,0x00,0x00] v_trunc_f32_e64 v5, vcc_hi -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x6b,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa1,0xd5,0x6b,0x00,0x00,0x00] v_trunc_f32_e64 v5, ttmp15 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x7b,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa1,0xd5,0x7b,0x00,0x00,0x00] v_trunc_f32_e64 v5, m0 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x7d,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa1,0xd5,0x7d,0x00,0x00,0x00] v_trunc_f32_e64 v5, exec_lo -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa1,0xd5,0x7e,0x00,0x00,0x00] v_trunc_f32_e64 v5, exec_hi -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x7f,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa1,0xd5,0x7f,0x00,0x00,0x00] v_trunc_f32_e64 v5, null -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, null ; encoding: [0x05,0x00,0xa1,0xd5,0x7c,0x00,0x00,0x00] v_trunc_f32_e64 v5, -1 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_trunc_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa1,0xd5,0xc1,0x00,0x00,0x00] v_trunc_f32_e64 v5, 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_trunc_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa1,0xd5,0xf0,0x00,0x00,0x08] v_trunc_f32_e64 v5, src_scc mul:4 -// GFX11: encoding: [0x05,0x00,0xa1,0xd5,0xfd,0x00,0x00,0x10] +// GFX11: v_trunc_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa1,0xd5,0xfd,0x00,0x00,0x10] v_trunc_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX11: encoding: [0xff,0x81,0xa1,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX11: v_trunc_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa1,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_trunc_f64_e64 v[5:6], v[1:2] -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x01,0x01,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x97,0xd5,0x01,0x01,0x00,0x00] v_trunc_f64_e64 v[5:6], v[254:255] -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0xfe,0x01,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x97,0xd5,0xfe,0x01,0x00,0x00] v_trunc_f64_e64 v[5:6], s[2:3] -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x02,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x97,0xd5,0x02,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], s[104:105] -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x68,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x97,0xd5,0x68,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], vcc -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x6a,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x97,0xd5,0x6a,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], ttmp[14:15] -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x7a,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x97,0xd5,0x7a,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], exec -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x7e,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x97,0xd5,0x7e,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], null -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0x7c,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x97,0xd5,0x7c,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], -1 -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0xc1,0x00,0x00,0x00] +// GFX11: v_trunc_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x97,0xd5,0xc1,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], 0.5 mul:2 -// GFX11: encoding: [0x05,0x00,0x97,0xd5,0xf0,0x00,0x00,0x08] +// GFX11: v_trunc_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x97,0xd5,0xf0,0x00,0x00,0x08] v_trunc_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX11: encoding: [0x05,0x01,0x97,0xd5,0xfd,0x00,0x00,0x30] +// GFX11: v_trunc_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x97,0xd5,0xfd,0x00,0x00,0x30] v_trunc_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX11: encoding: [0xfe,0x80,0x97,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX11: v_trunc_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x97,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vop1.s b/llvm/test/MC/AMDGPU/gfx12_asm_vop1.s index 59d1030fb8a9..a3a8eb139e9b 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_vop1.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vop1.s @@ -1,7 +1,8 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding -comment-column=0 %s | FileCheck --strict-whitespace --check-prefixes=GFX12,GFX12-ASM %s -// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | %extract-encodings | llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -disassemble -show-encoding -comment-column=0 | FileCheck --strict-whitespace --check-prefixes=GFX12,GFX12-DIS %s +// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | grep -oE '\[0x[0-9a-fx,]+\]' | llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -disassemble -show-encoding -comment-column=0 | FileCheck --strict-whitespace --check-prefixes=GFX12,GFX12-DIS %s // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -show-encoding -comment-column=0 %s | FileCheck --strict-whitespace --check-prefixes=GFX12,GFX12-ASM %s -// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -show-encoding %s | %extract-encodings | llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -disassemble -show-encoding -comment-column=0 | FileCheck --strict-whitespace --check-prefixes=GFX12,GFX12-DIS %s +// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -show-encoding %s | grep -oE '\[0x[0-9a-fx,]+\]' | llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -disassemble -show-encoding -comment-column=0 | FileCheck --strict-whitespace --check-prefixes=GFX12,GFX12-DIS %s v_bfrev_b32_e32 v5, v1 // GFX12: v_bfrev_b32_e32 v5, v1 ; encoding: [0x01,0x71,0x0a,0x7e] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp16.s b/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp16.s index 03a1e95587c6..70ed7c6159ea 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp16.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp16.s @@ -1,2884 +1,2885 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | FileCheck --check-prefixes=GFX12 %s // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -show-encoding %s | FileCheck --check-prefixes=GFX12 %s // this file will be converted to true16 format when more true16 instructions are supported v_bfrev_b32_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_bfrev_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_bfrev_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x40,0x01,0xff] v_bfrev_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x41,0x01,0xff] v_bfrev_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x01,0x01,0xff] v_bfrev_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_bfrev_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x11,0x01,0xff] v_bfrev_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_bfrev_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x21,0x01,0xff] v_bfrev_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_bfrev_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_bfrev_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x50,0x01,0xff] v_bfrev_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_bfrev_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_bfrev_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_bfrev_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x70,0x0a,0x7e,0x01,0x60,0x09,0x13] v_bfrev_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x70,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_bfrev_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x70,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_ceil_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ceil_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ceil_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ceil_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ceil_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ceil_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ceil_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ceil_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ceil_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ceil_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ceil_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_ceil_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ceil_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_ceil_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ceil_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_ceil_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb8,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ceil_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xb8,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_ceil_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb8,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_ceil_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ceil_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ceil_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ceil_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ceil_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ceil_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ceil_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ceil_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ceil_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ceil_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ceil_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_ceil_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ceil_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_ceil_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ceil_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_ceil_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x44,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ceil_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x44,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_ceil_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x44,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cls_i32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cls_i32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cls_i32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cls_i32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cls_i32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cls_i32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cls_i32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cls_i32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cls_i32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cls_i32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cls_i32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cls_i32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cls_i32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cls_i32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cls_i32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cls_i32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cls_i32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cls_i32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cls_i32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_clz_i32_u32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_clz_i32_u32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_clz_i32_u32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] v_clz_i32_u32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] v_clz_i32_u32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] v_clz_i32_u32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_clz_i32_u32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] v_clz_i32_u32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_clz_i32_u32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] v_clz_i32_u32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_clz_i32_u32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] v_clz_i32_u32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_clz_i32_u32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] v_clz_i32_u32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_clz_i32_u32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cos_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cos_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cos_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cos_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cos_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cos_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cos_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cos_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cos_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cos_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cos_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cos_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cos_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cos_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cos_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cos_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cos_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cos_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cos_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_cos_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_cos_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cos_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cos_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cos_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cos_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cos_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cos_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cos_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cos_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cos_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cos_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cos_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cos_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cos_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cos_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cos_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cos_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cos_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x6c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cos_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x6c,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cos_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x6c,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_ctz_i32_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ctz_i32_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ctz_i32_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ctz_i32_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ctz_i32_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ctz_i32_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ctz_i32_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ctz_i32_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ctz_i32_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ctz_i32_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ctz_i32_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_ctz_i32_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_fp8 v1, v3 quad_perm:[0,1,2,3] row_mask:0xa bank_mask:0xc -// GFX12: encoding: [0xfa,0xd8,0x02,0x7e,0x03,0xe4,0x00,0xac] +// GFX12: v_cvt_f32_fp8_dpp v1, v3 quad_perm:[0,1,2,3] row_mask:0xa bank_mask:0xc ; encoding: [0xfa,0xd8,0x02,0x7e,0x03,0xe4,0x00,0xac] v_cvt_f32_fp8 v1, v3 quad_perm:[3,2,1,0] row_mask:0x2 bank_mask:0xe -// GFX12: encoding: [0xfa,0xd8,0x02,0x7e,0x03,0x1b,0x00,0x2e] +// GFX12: v_cvt_f32_fp8_dpp v1, v3 quad_perm:[3,2,1,0] row_mask:0x2 bank_mask:0xe ; encoding: [0xfa,0xd8,0x02,0x7e,0x03,0x1b,0x00,0x2e] v_cvt_f32_bf8 v1, v3 quad_perm:[0,1,2,3] row_mask:0xa bank_mask:0xc -// GFX12: encoding: [0xfa,0xda,0x02,0x7e,0x03,0xe4,0x00,0xac] +// GFX12: v_cvt_f32_bf8_dpp v1, v3 quad_perm:[0,1,2,3] row_mask:0xa bank_mask:0xc ; encoding: [0xfa,0xda,0x02,0x7e,0x03,0xe4,0x00,0xac] v_cvt_f32_bf8 v1, v3 quad_perm:[3,2,1,0] row_mask:0x2 bank_mask:0xe -// GFX12: encoding: [0xfa,0xda,0x02,0x7e,0x03,0x1b,0x00,0x2e] +// GFX12: v_cvt_f32_bf8_dpp v1, v3 quad_perm:[3,2,1,0] row_mask:0x2 bank_mask:0xe ; encoding: [0xfa,0xda,0x02,0x7e,0x03,0x1b,0x00,0x2e] v_cvt_f16_f32 v5.l, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f16_f32 v5.l, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f16_f32 v5.l, v1 row_mirror -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f16_f32 v5.l, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f16_f32 v5.l, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x14,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f16_f32 v127.l, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x14,0xfe,0x7e,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_f16_f32_dpp v127.l, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x14,0xfe,0x7e,0xff,0x6f,0x35,0x30] v_cvt_f16_f32 v5.h, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x14,0x0a,0x7f,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_f32_dpp v5.h, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x14,0x0a,0x7f,0x01,0x60,0x09,0x13] v_cvt_f16_f32 v127.h, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x14,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_f16_f32_dpp v127.h, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x14,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_f16_i16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f16_i16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f16_i16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f16_i16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f16_i16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f16_i16 v127.l, v127.l row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa2,0xfe,0x7e,0x7f,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_i16_dpp v127.l, v127.l row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa2,0xfe,0x7e,0x7f,0x6f,0x05,0x30] v_cvt_f16_i16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa2,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_f16_i16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa2,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_f16_i16 v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa2,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_i16_dpp v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa2,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f16_u16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f16_u16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f16_u16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f16_u16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f16_u16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa0,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f16_u16 v127.l, v127.l row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa0,0xfe,0x7e,0x7f,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_u16_dpp v127.l, v127.l row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa0,0xfe,0x7e,0x7f,0x6f,0x05,0x30] v_cvt_f16_u16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa0,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_f16_u16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa0,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_f16_u16 v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa0,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_u16_dpp v127.h, v127.h row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa0,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_f16 v5, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_f16 v5, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_f16 v5, v1.l row_mirror -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_f16 v5, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_f16 v5, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x16,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_f16 v255, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x16,0xfe,0x7f,0x7f,0x6f,0x35,0x30] +// GFX12: v_cvt_f32_f16_dpp v255, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x16,0xfe,0x7f,0x7f,0x6f,0x35,0x30] v_cvt_f32_f16 v5, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x16,0x0a,0x7e,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_f32_f16_dpp v5, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x16,0x0a,0x7e,0x81,0x60,0x09,0x13] v_cvt_f32_f16 v255, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x16,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_f32_f16_dpp v255, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x16,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_f32_i32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_i32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_i32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_i32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_i32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_i32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_i32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_i32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_i32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_i32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_i32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x0a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_i32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x0a,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_i32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x0a,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_u32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_u32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_u32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_u32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_u32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_u32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_u32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_u32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_u32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_u32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_u32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x0c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_u32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x0c,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_u32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x0c,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte0 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte0 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte0 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte0 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte0 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x22,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte0 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x22,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte0_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x22,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte1 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte1 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte1 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte1 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte1 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x24,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte1 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x24,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte1_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x24,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte2 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte2 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte2 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte2 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte2 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x26,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte2 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x26,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte2_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x26,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte3 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte3 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte3 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte3 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte3 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x28,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte3 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x28,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte3_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x28,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_floor_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_floor_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_floor_i32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_floor_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_floor_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_floor_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_floor_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_flr_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_flr_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_flr_i32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_flr_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_flr_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x1a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_flr_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_floor_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x1a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_i16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_i16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_i16_f16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_i16_f16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_i16_f16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa6,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_i16_f16 v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa6,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_cvt_i16_f16_dpp v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa6,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_cvt_i16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa6,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_i16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa6,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_i16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa6,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_i16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa6,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_i32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_i32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_i32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_i32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_i32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x10,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x10,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x10,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_i32_i16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_i32_i16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_i32_i16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_i32_i16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_i32_i16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_i32_i16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_i32_i16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_i32_i16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_i32_i16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_i32_i16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i32_i16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xd4,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_i32_i16 v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xd4,0xfe,0x7f,0x7f,0x6f,0x05,0x30] +// GFX12: v_cvt_i32_i16_dpp v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xd4,0xfe,0x7f,0x7f,0x6f,0x05,0x30] v_cvt_nearest_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_nearest_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_nearest_i32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_nearest_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_nearest_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_nearest_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_nearest_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_norm_i16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_norm_i16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_norm_i16_f16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_norm_i16_f16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc6,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_norm_i16_f16 v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc6,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_cvt_norm_i16_f16_dpp v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc6,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_cvt_norm_i16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc6,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_norm_i16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc6,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_norm_i16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc6,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_norm_i16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc6,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_norm_u16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_norm_u16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_norm_u16_f16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_norm_u16_f16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc8,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_norm_u16_f16 v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc8,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_cvt_norm_u16_f16_dpp v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc8,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_cvt_norm_u16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc8,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_norm_u16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc8,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_norm_u16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc8,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_norm_u16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc8,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_off_f32_i4 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_off_f32_i4 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_off_f32_i4 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_off_f32_i4 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_off_f32_i4 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x1c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_off_f32_i4 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x1c,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_off_f32_i4_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x1c,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_cvt_rpi_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_rpi_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_rpi_i32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_rpi_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_rpi_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x18,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_rpi_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_nearest_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x18,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_u16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_u16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_u16_f16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_u16_f16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_u16_f16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa4,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_u16_f16 v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa4,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_cvt_u16_f16_dpp v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa4,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_cvt_u16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa4,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_cvt_u16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa4,0x0a,0x7f,0x81,0x60,0x09,0x13] v_cvt_u16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa4,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_u16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa4,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_u32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_u32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_u32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_u32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_u32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_u32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_u32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_u32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_u32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_u32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x0e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_u32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x0e,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_cvt_u32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x0e,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_cvt_u32_u16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_cvt_u32_u16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_cvt_u32_u16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_cvt_u32_u16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_cvt_u32_u16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_cvt_u32_u16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_cvt_u32_u16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_cvt_u32_u16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_cvt_u32_u16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_cvt_u32_u16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u32_u16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xd6,0x0a,0x7e,0x01,0x60,0x09,0x13] v_cvt_u32_u16 v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xd6,0xfe,0x7f,0x7f,0x6f,0x05,0x30] +// GFX12: v_cvt_u32_u16_dpp v255, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xd6,0xfe,0x7f,0x7f,0x6f,0x05,0x30] v_exp_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_exp_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_exp_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_exp_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_exp_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x40,0x01,0xff] v_exp_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x41,0x01,0xff] v_exp_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x01,0x01,0xff] v_exp_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_exp_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x11,0x01,0xff] v_exp_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_exp_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x21,0x01,0xff] v_exp_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_exp_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_exp_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x50,0x01,0xff] v_exp_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_exp_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_exp_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_exp_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb0,0x0a,0x7e,0x01,0x60,0x09,0x13] v_exp_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xb0,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_exp_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb0,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_exp_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_exp_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_exp_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_exp_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_exp_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_exp_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_exp_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_exp_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_exp_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_exp_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_exp_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_exp_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_exp_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_exp_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_exp_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_exp_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_exp_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_exp_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x4a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_exp_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x4a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_exp_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x4a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_ffbh_i32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_cls_i32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ffbh_i32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_cls_i32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ffbh_i32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ffbh_i32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ffbh_i32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ffbh_i32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ffbh_i32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ffbh_i32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ffbh_i32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ffbh_i32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ffbh_i32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_cls_i32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ffbh_i32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_cls_i32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ffbh_i32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_cls_i32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x76,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ffbh_i32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_cls_i32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x76,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_ffbh_u32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ffbh_u32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ffbh_u32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ffbh_u32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ffbh_u32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ffbh_u32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ffbh_u32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ffbh_u32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ffbh_u32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ffbh_u32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ffbh_u32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ffbh_u32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ffbh_u32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_clz_i32_u32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x72,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ffbh_u32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_clz_i32_u32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x72,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_ffbl_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_ffbl_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_ffbl_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x40,0x01,0xff] v_ffbl_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x41,0x01,0xff] v_ffbl_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x01,0x01,0xff] v_ffbl_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_ffbl_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x11,0x01,0xff] v_ffbl_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_ffbl_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x21,0x01,0xff] v_ffbl_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_ffbl_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x50,0x01,0xff] v_ffbl_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_ffbl_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_ctz_i32_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x74,0x0a,0x7e,0x01,0x60,0x09,0x13] v_ffbl_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_ctz_i32_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x74,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_floor_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_floor_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_floor_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_floor_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_floor_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x40,0x01,0xff] v_floor_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x41,0x01,0xff] v_floor_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x01,0x01,0xff] v_floor_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_floor_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x11,0x01,0xff] v_floor_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_floor_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x21,0x01,0xff] v_floor_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_floor_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_floor_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x50,0x01,0xff] v_floor_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_floor_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_floor_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_floor_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb6,0x0a,0x7e,0x01,0x60,0x09,0x13] v_floor_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xb6,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_floor_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb6,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_floor_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_floor_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_floor_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_floor_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_floor_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x40,0x01,0xff] v_floor_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x41,0x01,0xff] v_floor_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x01,0x01,0xff] v_floor_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_floor_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x11,0x01,0xff] v_floor_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_floor_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x21,0x01,0xff] v_floor_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_floor_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_floor_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x50,0x01,0xff] v_floor_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_floor_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_floor_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_floor_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x48,0x0a,0x7e,0x01,0x60,0x09,0x13] v_floor_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x48,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_floor_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x48,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_fract_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_fract_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_fract_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_fract_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_fract_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x40,0x01,0xff] v_fract_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x41,0x01,0xff] v_fract_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x01,0x01,0xff] v_fract_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_fract_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x11,0x01,0xff] v_fract_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_fract_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x21,0x01,0xff] v_fract_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_fract_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_fract_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x50,0x01,0xff] v_fract_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_fract_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_fract_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_fract_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xbe,0x0a,0x7e,0x01,0x60,0x09,0x13] v_fract_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xbe,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_fract_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xbe,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_fract_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_fract_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_fract_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_fract_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_fract_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x40,0x01,0xff] v_fract_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x41,0x01,0xff] v_fract_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x01,0x01,0xff] v_fract_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_fract_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x11,0x01,0xff] v_fract_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_fract_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x21,0x01,0xff] v_fract_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_fract_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_fract_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x50,0x01,0xff] v_fract_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_fract_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_fract_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_fract_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x40,0x0a,0x7e,0x01,0x60,0x09,0x13] v_fract_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x40,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_fract_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x40,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_frexp_exp_i16_f16 v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_exp_i16_f16 v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_mirror -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_half_mirror -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shl:1 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shl:15 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shr:1 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_shr:15 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_ror:1 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_ror:15 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_exp_i16_f16 v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_exp_i16_f16 v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb4,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_exp_i16_f16 v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xb4,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_frexp_exp_i16_f16_dpp v127.l, -|v127.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb4,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_frexp_exp_i16_f16 v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xb4,0x0a,0x7f,0x81,0x60,0x09,0x13] +// GFX12: v_frexp_exp_i16_f16_dpp v5.h, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb4,0x0a,0x7f,0x81,0x60,0x09,0x13] v_frexp_exp_i16_f16 v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xb4,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_frexp_exp_i16_f16_dpp v127.h, -|v127.h| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb4,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_frexp_exp_i32_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_exp_i32_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_exp_i32_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_exp_i32_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_exp_i32_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x7e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_exp_i32_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x7e,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_frexp_exp_i32_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x7e,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_frexp_mant_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_mant_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_mant_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_mant_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_mant_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_mant_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_mant_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_mant_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_mant_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_mant_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_mant_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xb2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_mant_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xb2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_frexp_mant_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xb2,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_frexp_mant_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_frexp_mant_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_frexp_mant_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x40,0x01,0xff] v_frexp_mant_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x41,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x01,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x11,0x01,0xff] v_frexp_mant_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_frexp_mant_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x21,0x01,0xff] v_frexp_mant_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_frexp_mant_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x50,0x01,0xff] v_frexp_mant_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_frexp_mant_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_mant_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x80,0x0a,0x7e,0x01,0x60,0x09,0x13] v_frexp_mant_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x80,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_frexp_mant_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x80,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_log_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_log_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_log_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_log_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_log_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x40,0x01,0xff] v_log_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x41,0x01,0xff] v_log_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x01,0x01,0xff] v_log_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_log_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x11,0x01,0xff] v_log_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_log_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x21,0x01,0xff] v_log_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_log_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_log_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x50,0x01,0xff] v_log_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_log_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_log_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_log_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xae,0x0a,0x7e,0x01,0x60,0x09,0x13] v_log_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xae,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_log_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xae,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_log_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_log_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_log_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_log_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_log_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_log_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_log_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_log_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_log_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_log_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_log_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_log_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_log_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_log_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_log_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_log_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_log_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_log_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x4e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_log_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x4e,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_log_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x4e,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_mov_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_mov_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_mov_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_mov_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_mov_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x40,0x01,0xff] v_mov_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x41,0x01,0xff] v_mov_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x01,0x01,0xff] v_mov_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_mov_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x11,0x01,0xff] v_mov_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_mov_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x21,0x01,0xff] v_mov_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_mov_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_mov_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x50,0x01,0xff] v_mov_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_mov_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_mov_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_mov_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x02,0x0a,0x7e,0x01,0x60,0x09,0x13] v_mov_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x02,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_mov_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x02,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movreld_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movreld_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movreld_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movreld_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movreld_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movreld_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movreld_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movreld_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movreld_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movreld_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movreld_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_movreld_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movreld_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_movreld_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movreld_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_movreld_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x84,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movreld_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x84,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_movreld_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x84,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movrels_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movrels_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movrels_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movrels_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movrels_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movrels_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movrels_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movrels_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movrels_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movrels_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movrels_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_movrels_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movrels_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_movrels_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movrels_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_movrels_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x86,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movrels_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x86,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_movrels_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x86,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movrelsd_2_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movrelsd_2_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movrelsd_2_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movrelsd_2_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movrelsd_2_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x90,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movrelsd_2_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x90,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_movrelsd_2_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x90,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_movrelsd_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_movrelsd_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_movrelsd_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x40,0x01,0xff] v_movrelsd_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x41,0x01,0xff] v_movrelsd_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x01,0x01,0xff] v_movrelsd_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_movrelsd_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x11,0x01,0xff] v_movrelsd_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_movrelsd_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x21,0x01,0xff] v_movrelsd_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_movrelsd_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x50,0x01,0xff] v_movrelsd_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_movrelsd_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_movrelsd_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x88,0x0a,0x7e,0x01,0x60,0x09,0x13] v_movrelsd_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x88,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_movrelsd_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x88,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_not_b16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_not_b16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_not_b16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_not_b16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_not_b16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x40,0x01,0xff] v_not_b16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x41,0x01,0xff] v_not_b16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x01,0x01,0xff] v_not_b16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_not_b16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x11,0x01,0xff] v_not_b16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_not_b16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x21,0x01,0xff] v_not_b16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_not_b16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_not_b16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x50,0x01,0xff] v_not_b16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_not_b16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_not_b16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_not_b16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xd2,0x0a,0x7e,0x01,0x60,0x09,0x13] v_not_b16 v127, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xd2,0xfe,0x7e,0x7f,0x6f,0x05,0x30] +// GFX12: v_not_b16_dpp v127, v127 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xd2,0xfe,0x7e,0x7f,0x6f,0x05,0x30] v_not_b32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_not_b32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_not_b32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_not_b32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_not_b32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x40,0x01,0xff] v_not_b32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x41,0x01,0xff] v_not_b32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x01,0x01,0xff] v_not_b32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_not_b32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x11,0x01,0xff] v_not_b32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_not_b32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x21,0x01,0xff] v_not_b32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_not_b32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_not_b32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x50,0x01,0xff] v_not_b32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_not_b32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_not_b32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_not_b32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x6e,0x0a,0x7e,0x01,0x60,0x09,0x13] v_not_b32 v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x6e,0xfe,0x7f,0xff,0x6f,0x05,0x30] +// GFX12: v_not_b32_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x6e,0xfe,0x7f,0xff,0x6f,0x05,0x30] v_rcp_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rcp_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rcp_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rcp_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rcp_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rcp_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rcp_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rcp_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rcp_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rcp_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rcp_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rcp_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rcp_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rcp_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rcp_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rcp_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xa8,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rcp_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xa8,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_rcp_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xa8,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_rcp_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rcp_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rcp_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rcp_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rcp_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rcp_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rcp_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rcp_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rcp_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rcp_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rcp_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rcp_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rcp_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rcp_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rcp_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rcp_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x54,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rcp_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x54,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_rcp_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x54,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rcp_iflag_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rcp_iflag_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rcp_iflag_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rcp_iflag_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rcp_iflag_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x56,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rcp_iflag_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x56,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_rcp_iflag_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x56,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rndne_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rndne_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rndne_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rndne_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rndne_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rndne_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rndne_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rndne_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rndne_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rndne_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rndne_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rndne_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rndne_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rndne_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rndne_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rndne_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xbc,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rndne_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xbc,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_rndne_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xbc,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_rndne_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rndne_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rndne_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rndne_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rndne_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rndne_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rndne_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rndne_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rndne_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rndne_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rndne_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rndne_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rndne_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rndne_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rndne_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rndne_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x46,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rndne_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x46,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_rndne_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x46,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_rsq_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rsq_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rsq_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rsq_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rsq_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rsq_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rsq_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rsq_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rsq_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rsq_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rsq_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rsq_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rsq_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rsq_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rsq_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rsq_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xac,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rsq_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xac,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_rsq_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xac,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_rsq_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_rsq_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_rsq_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x40,0x01,0xff] v_rsq_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x41,0x01,0xff] v_rsq_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x01,0x01,0xff] v_rsq_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_rsq_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x11,0x01,0xff] v_rsq_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_rsq_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x21,0x01,0xff] v_rsq_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_rsq_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_rsq_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x50,0x01,0xff] v_rsq_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_rsq_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_rsq_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_rsq_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x5c,0x0a,0x7e,0x01,0x60,0x09,0x13] v_rsq_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x5c,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_rsq_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x5c,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_sat_pk_u8_i16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sat_pk_u8_i16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sat_pk_u8_i16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sat_pk_u8_i16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sat_pk_u8_i16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc4,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sat_pk_u8_i16 v127, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc4,0xfe,0x7e,0xff,0x6f,0x05,0x30] +// GFX12: v_sat_pk_u8_i16_dpp v127, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc4,0xfe,0x7e,0xff,0x6f,0x05,0x30] v_sin_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_sin_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sin_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_sin_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sin_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sin_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sin_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sin_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sin_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sin_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sin_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sin_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sin_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_sin_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sin_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_sin_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sin_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_sin_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xc0,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sin_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xc0,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_sin_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xc0,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_sin_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_sin_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sin_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_sin_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sin_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sin_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sin_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sin_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sin_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sin_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sin_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sin_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sin_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_sin_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sin_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_sin_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sin_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_sin_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x6a,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sin_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x6a,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_sin_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x6a,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_sqrt_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sqrt_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sqrt_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sqrt_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sqrt_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sqrt_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sqrt_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sqrt_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sqrt_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sqrt_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sqrt_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_sqrt_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sqrt_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_sqrt_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sqrt_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_sqrt_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xaa,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sqrt_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xaa,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_sqrt_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xaa,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_sqrt_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_sqrt_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_sqrt_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x40,0x01,0xff] v_sqrt_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x41,0x01,0xff] v_sqrt_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x01,0x01,0xff] v_sqrt_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_sqrt_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x11,0x01,0xff] v_sqrt_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_sqrt_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x21,0x01,0xff] v_sqrt_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_sqrt_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_sqrt_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x50,0x01,0xff] v_sqrt_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_sqrt_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_sqrt_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_sqrt_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x66,0x0a,0x7e,0x01,0x60,0x09,0x13] v_sqrt_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x66,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_sqrt_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x66,0xfe,0x7f,0xff,0x6f,0x35,0x30] v_trunc_f16 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_trunc_f16 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_trunc_f16 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x40,0x01,0xff] v_trunc_f16 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x41,0x01,0xff] v_trunc_f16 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x01,0x01,0xff] v_trunc_f16 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_trunc_f16 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x11,0x01,0xff] v_trunc_f16 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_trunc_f16 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x21,0x01,0xff] v_trunc_f16 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_trunc_f16 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_trunc_f16_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x50,0x01,0xff] v_trunc_f16 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_trunc_f16_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_trunc_f16 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_trunc_f16_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0xba,0x0a,0x7e,0x01,0x60,0x09,0x13] v_trunc_f16 v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0xba,0xfe,0x7e,0x7f,0x6f,0x35,0x30] +// GFX12: v_trunc_f16_dpp v127, -|v127| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0xba,0xfe,0x7e,0x7f,0x6f,0x35,0x30] v_trunc_f32 v5, v1 quad_perm:[3,2,1,0] -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1b,0x00,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1b,0x00,0xff] v_trunc_f32 v5, v1 quad_perm:[0,1,2,3] -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0xe4,0x00,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0xe4,0x00,0xff] v_trunc_f32 v5, v1 row_mirror -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x40,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x40,0x01,0xff] v_trunc_f32 v5, v1 row_half_mirror -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x41,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x41,0x01,0xff] v_trunc_f32 v5, v1 row_shl:1 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x01,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x01,0x01,0xff] v_trunc_f32 v5, v1 row_shl:15 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x0f,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x0f,0x01,0xff] v_trunc_f32 v5, v1 row_shr:1 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x11,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x11,0x01,0xff] v_trunc_f32 v5, v1 row_shr:15 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1f,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x1f,0x01,0xff] v_trunc_f32 v5, v1 row_ror:1 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x21,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x21,0x01,0xff] v_trunc_f32 v5, v1 row_ror:15 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x2f,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x2f,0x01,0xff] v_trunc_f32 v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x50,0x01,0xff] +// GFX12: v_trunc_f32_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x50,0x01,0xff] v_trunc_f32 v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x5f,0x01,0x01] +// GFX12: v_trunc_f32_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x5f,0x01,0x01] v_trunc_f32 v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x60,0x09,0x13] +// GFX12: v_trunc_f32_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0xfa,0x42,0x0a,0x7e,0x01,0x60,0x09,0x13] v_trunc_f32 v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: encoding: [0xfa,0x42,0xfe,0x7f,0xff,0x6f,0x35,0x30] +// GFX12: v_trunc_f32_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xfa,0x42,0xfe,0x7f,0xff,0x6f,0x35,0x30] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp8.s b/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp8.s index 28bc8b9f9a45..c4d7c6c96b9f 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp8.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vop1_dpp8.s @@ -1,673 +1,674 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | FileCheck --check-prefixes=GFX12 %s // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64,+real-true16 -show-encoding %s | FileCheck --check-prefixes=GFX12 %s // this file will be converted to true16 format when more true16 instructions are supported v_bfrev_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_bfrev_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] v_bfrev_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_bfrev_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x70,0x0a,0x7e,0x01,0x77,0x39,0x05] v_bfrev_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x70,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x70,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ceil_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xb8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xb8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xb8,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_ceil_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb8,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_ceil_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x44,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ceil_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x44,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_ceil_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x44,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cls_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cls_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cls_i32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cls_i32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] v_clz_i32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_clz_i32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_clz_i32_u32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cos_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cos_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cos_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x6c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cos_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x6c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cos_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x6c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ctz_i32_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ctz_i32_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ctz_i32_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_fp8 v5, v1 dpp8:[0,1,2,3,4,5,6,7] -// GFX12: encoding: [0xe9,0xd8,0x0a,0x7e,0x01,0x88,0xc6,0xfa] +// GFX12: v_cvt_f32_fp8_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7] ; encoding: [0xe9,0xd8,0x0a,0x7e,0x01,0x88,0xc6,0xfa] v_cvt_f32_fp8 v1, v3 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xd8,0x02,0x7e,0x03,0x77,0x39,0x05] +// GFX12: v_cvt_f32_fp8_dpp v1, v3 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd8,0x02,0x7e,0x03,0x77,0x39,0x05] v_cvt_f32_bf8 v5, v1 dpp8:[0,1,2,3,4,5,6,7] -// GFX12: encoding: [0xe9,0xda,0x0a,0x7e,0x01,0x88,0xc6,0xfa] +// GFX12: v_cvt_f32_bf8_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7] ; encoding: [0xe9,0xda,0x0a,0x7e,0x01,0x88,0xc6,0xfa] v_cvt_f32_bf8 v1, v3 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xda,0x02,0x7e,0x03,0x77,0x39,0x05] +// GFX12: v_cvt_f32_bf8_dpp v1, v3 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xda,0x02,0x7e,0x03,0x77,0x39,0x05] v_cvt_f16_f32 v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x14,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x14,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_f32 v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x14,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_f32_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x14,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_f32 v127.l, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x14,0xfe,0x7e,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_dpp v127.l, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x14,0xfe,0x7e,0xff,0x00,0x00,0x00] v_cvt_f16_f32 v5.h, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x14,0x0a,0x7f,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_f32_dpp v5.h, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x14,0x0a,0x7f,0x01,0x77,0x39,0x05] v_cvt_f16_f32 v127.h, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x14,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_dpp v127.h, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x14,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f16_i16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xa2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_i16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_i16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cvt_f16_i16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa2,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa2,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_f16_i16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa2,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa2,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f16_u16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xa0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_u16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f16_u16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa0,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa0,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cvt_f16_u16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa0,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa0,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_f16_u16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa0,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa0,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_f16 v5, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x16,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x16,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_f16 v5, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x16,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_f16_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x16,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_f16 v255, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x16,0xfe,0x7f,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_dpp v255, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x16,0xfe,0x7f,0x7f,0x00,0x00,0x00] v_cvt_f32_f16 v5, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x16,0x0a,0x7e,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_f32_f16_dpp v5, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x16,0x0a,0x7e,0x81,0x77,0x39,0x05] v_cvt_f32_f16 v255, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x16,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_dpp v255, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x16,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x0a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_i32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x0a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x0a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x0c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_u32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x0c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x0c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte0 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte0_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x22,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x22,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x22,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte1 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte1_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x24,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x24,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x24,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte2 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte2_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x26,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x26,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x26,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte3 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte3_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x28,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x28,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x28,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_floor_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_flr_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x1a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x1a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xa6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i16_f16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa6,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa6,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cvt_i16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa6,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa6,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_i16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa6,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa6,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x10,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x10,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x10,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_i32_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xd4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_i32_i16 v255, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xd4,0xfe,0x7f,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_dpp v255, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xd4,0xfe,0x7f,0x7f,0x00,0x00,0x00] v_cvt_nearest_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_norm_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xc6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc6,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc6,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cvt_norm_i16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc6,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc6,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_norm_i16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc6,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc6,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_norm_u16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xc8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc8,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc8,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cvt_norm_u16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc8,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc8,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_norm_u16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc8,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc8,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_off_f32_i4 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_off_f32_i4_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x1c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x1c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x1c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_rpi_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x18,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x18,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_u16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xa4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u16_f16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa4,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa4,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_cvt_u16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa4,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa4,0x0a,0x7f,0x81,0x77,0x39,0x05] v_cvt_u16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa4,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa4,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_u32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x0e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x0e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x0e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_cvt_u32_u16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_u16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_u16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_u16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xd6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_cvt_u32_u16 v255, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xd6,0xfe,0x7f,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_dpp v255, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xd6,0xfe,0x7f,0x7f,0x00,0x00,0x00] v_exp_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xb0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xb0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xb0,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_exp_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb0,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_exp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x4a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_exp_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x4a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_exp_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x4a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ffbh_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_i32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x76,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_i32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_cls_i32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x76,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ffbh_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_u32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x72,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbh_u32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x72,0xfe,0x7f,0xff,0x00,0x00,0x00] v_ffbl_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbl_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x74,0x0a,0x7e,0x01,0x77,0x39,0x05] v_ffbl_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x74,0xfe,0x7f,0xff,0x00,0x00,0x00] v_floor_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xb6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xb6,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb6,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xb6,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_floor_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb6,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_floor_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x48,0x0a,0x7e,0x01,0x77,0x39,0x05] v_floor_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x48,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_floor_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x48,0xfe,0x7f,0xff,0x00,0x00,0x00] v_fract_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xbe,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xbe,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_fract_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xbe,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_fract_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x40,0x0a,0x7e,0x01,0x77,0x39,0x05] v_fract_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x40,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_fract_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x40,0xfe,0x7f,0xff,0x00,0x00,0x00] v_frexp_exp_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xb4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16 v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xb4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16 v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xb4,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_dpp v127.l, v127.l dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb4,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_frexp_exp_i16_f16 v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xb4,0x0a,0x7f,0x81,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb4,0x0a,0x7f,0x81,0x77,0x39,0x05] v_frexp_exp_i16_f16 v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xb4,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_dpp v127.h, v127.h dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb4,0xfe,0x7f,0xff,0x00,0x00,0x00] v_frexp_exp_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i32_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x7e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x7e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x7e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_frexp_mant_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xb2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xb2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xb2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_frexp_mant_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x80,0x0a,0x7e,0x01,0x77,0x39,0x05] v_frexp_mant_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x80,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x80,0xfe,0x7f,0xff,0x00,0x00,0x00] v_log_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xae,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_log_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xae,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xae,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_log_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xae,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xae,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_log_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xae,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_log_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_log_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_log_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x4e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_log_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x4e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_log_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x4e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_mov_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_mov_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] v_mov_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_mov_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x02,0x0a,0x7e,0x01,0x77,0x39,0x05] v_mov_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x02,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_mov_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x02,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movreld_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movreld_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movreld_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movreld_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x84,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movreld_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x84,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_movreld_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x84,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movrels_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movrels_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrels_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movrels_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x86,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrels_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x86,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_movrels_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x86,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movrelsd_2_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_2_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movrelsd_2_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x90,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_2_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x90,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_movrelsd_2_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x90,0xfe,0x7f,0xff,0x00,0x00,0x00] v_movrelsd_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movrelsd_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_movrelsd_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x88,0x0a,0x7e,0x01,0x77,0x39,0x05] v_movrelsd_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x88,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_movrelsd_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x88,0xfe,0x7f,0xff,0x00,0x00,0x00] v_not_b16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_not_b16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_not_b16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xd2,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xd2,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_not_b16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xd2,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_not_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_not_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_not_b32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x6e,0x0a,0x7e,0x01,0x77,0x39,0x05] v_not_b32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x6e,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_not_b32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x6e,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rcp_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xa8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xa8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xa8,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xa8,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xa8,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_rcp_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xa8,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_rcp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x54,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x54,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_rcp_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x54,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rcp_iflag_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_iflag_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_iflag_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x56,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rcp_iflag_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x56,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x56,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rndne_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xbc,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xbc,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_rndne_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xbc,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_rndne_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x46,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rndne_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x46,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_rndne_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x46,0xfe,0x7f,0xff,0x00,0x00,0x00] v_rsq_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xac,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xac,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xac,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xac,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xac,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_rsq_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xac,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_rsq_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x5c,0x0a,0x7e,0x01,0x77,0x39,0x05] v_rsq_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x5c,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_rsq_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x5c,0xfe,0x7f,0xff,0x00,0x00,0x00] v_sat_pk_u8_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sat_pk_u8_i16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc4,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16 v127, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc4,0xfe,0x7e,0xff,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_dpp v127, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc4,0xfe,0x7e,0xff,0x00,0x00,0x00] v_sin_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xc0,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xc0,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_sin_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xc0,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_sin_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x6a,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sin_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x6a,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_sin_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x6a,0xfe,0x7f,0xff,0x00,0x00,0x00] v_sqrt_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xaa,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xaa,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xaa,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xaa,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xaa,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xaa,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_sqrt_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x66,0x0a,0x7e,0x01,0x77,0x39,0x05] v_sqrt_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x66,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x66,0xfe,0x7f,0xff,0x00,0x00,0x00] v_trunc_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f16 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f16_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0xba,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f16 v127, v127 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0xba,0xfe,0x7e,0x7f,0x00,0x00,0x00] +// GFX12: v_trunc_f16_dpp v127, v127 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0xba,0xfe,0x7e,0x7f,0x00,0x00,0x00] v_trunc_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0xe9,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f32 v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: encoding: [0xea,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f32_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0xea,0x42,0x0a,0x7e,0x01,0x77,0x39,0x05] v_trunc_f32 v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: encoding: [0xe9,0x42,0xfe,0x7f,0xff,0x00,0x00,0x00] +// GFX12: v_trunc_f32_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xe9,0x42,0xfe,0x7f,0xff,0x00,0x00,0x00] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1.s b/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1.s index 6e1708dd879c..eeee3d8f8f9a 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1.s @@ -1,3727 +1,3728 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | FileCheck --check-prefix=GFX12 %s v_bfrev_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xb8,0xd5,0x01,0x01,0x00,0x00] v_bfrev_b32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xb8,0xd5,0xff,0x01,0x00,0x00] v_bfrev_b32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xb8,0xd5,0x01,0x00,0x00,0x00] v_bfrev_b32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xb8,0xd5,0x69,0x00,0x00,0x00] v_bfrev_b32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb8,0xd5,0x6a,0x00,0x00,0x00] v_bfrev_b32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb8,0xd5,0x6b,0x00,0x00,0x00] v_bfrev_b32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb8,0xd5,0x7b,0x00,0x00,0x00] v_bfrev_b32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xb8,0xd5,0x7d,0x00,0x00,0x00] v_bfrev_b32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb8,0xd5,0x7e,0x00,0x00,0x00] v_bfrev_b32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb8,0xd5,0x7f,0x00,0x00,0x00] v_bfrev_b32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, null ; encoding: [0x05,0x00,0xb8,0xd5,0x7c,0x00,0x00,0x00] v_bfrev_b32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xb8,0xd5,0xc1,0x00,0x00,0x00] v_bfrev_b32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb8,0xd5,0xf0,0x00,0x00,0x00] v_bfrev_b32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xb8,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb8,0xd5,0xfd,0x00,0x00,0x00] v_bfrev_b32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xb8,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_bfrev_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb8,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_ceil_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdc,0xd5,0x01,0x01,0x00,0x00] v_ceil_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdc,0xd5,0xff,0x01,0x00,0x00] v_ceil_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdc,0xd5,0x01,0x00,0x00,0x00] v_ceil_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdc,0xd5,0x69,0x00,0x00,0x00] v_ceil_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdc,0xd5,0x6a,0x00,0x00,0x00] v_ceil_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdc,0xd5,0x6b,0x00,0x00,0x00] v_ceil_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdc,0xd5,0x7b,0x00,0x00,0x00] v_ceil_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdc,0xd5,0x7d,0x00,0x00,0x00] v_ceil_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdc,0xd5,0x7e,0x00,0x00,0x00] v_ceil_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdc,0xd5,0x7f,0x00,0x00,0x00] v_ceil_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, null ; encoding: [0x05,0x00,0xdc,0xd5,0x7c,0x00,0x00,0x00] v_ceil_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdc,0xd5,0xc1,0x00,0x00,0x00] v_ceil_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_ceil_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdc,0xd5,0xf0,0x00,0x00,0x08] v_ceil_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xdc,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_ceil_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdc,0xd5,0xfd,0x00,0x00,0x10] v_ceil_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xdc,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_ceil_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdc,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_ceil_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa2,0xd5,0x01,0x01,0x00,0x00] v_ceil_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa2,0xd5,0xff,0x01,0x00,0x00] v_ceil_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa2,0xd5,0x01,0x00,0x00,0x00] v_ceil_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa2,0xd5,0x69,0x00,0x00,0x00] v_ceil_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa2,0xd5,0x6a,0x00,0x00,0x00] v_ceil_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa2,0xd5,0x6b,0x00,0x00,0x00] v_ceil_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa2,0xd5,0x7b,0x00,0x00,0x00] v_ceil_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa2,0xd5,0x7d,0x00,0x00,0x00] v_ceil_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa2,0xd5,0x7e,0x00,0x00,0x00] v_ceil_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa2,0xd5,0x7f,0x00,0x00,0x00] v_ceil_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, null ; encoding: [0x05,0x00,0xa2,0xd5,0x7c,0x00,0x00,0x00] v_ceil_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa2,0xd5,0xc1,0x00,0x00,0x00] v_ceil_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_ceil_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa2,0xd5,0xf0,0x00,0x00,0x08] v_ceil_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa2,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_ceil_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa2,0xd5,0xfd,0x00,0x00,0x10] v_ceil_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa2,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_ceil_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa2,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_ceil_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x98,0xd5,0x01,0x01,0x00,0x00] v_ceil_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x98,0xd5,0xfe,0x01,0x00,0x00] v_ceil_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x98,0xd5,0x02,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x98,0xd5,0x68,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x98,0xd5,0x6a,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x98,0xd5,0x7a,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x98,0xd5,0x7e,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x98,0xd5,0x7c,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_ceil_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x98,0xd5,0xc1,0x00,0x00,0x00] v_ceil_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x98,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_ceil_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x98,0xd5,0xf0,0x00,0x00,0x08] v_ceil_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0x98,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_ceil_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x98,0xd5,0xfd,0x00,0x00,0x30] v_ceil_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0x98,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_ceil_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x98,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cls_i32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, v1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] v_cls_i32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, v255 ; encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] v_cls_i32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, s1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] v_cls_i32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, s105 ; encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] v_cls_i32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] v_cls_i32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] v_cls_i32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] v_cls_i32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, m0 ; encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] v_cls_i32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] v_cls_i32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] v_cls_i32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, null ; encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] v_cls_i32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, -1 ; encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] v_cls_i32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] v_cls_i32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, src_scc ; encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] v_cls_i32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_cls_i32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_clz_i32_u32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, v1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] v_clz_i32_u32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, v255 ; encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] v_clz_i32_u32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, s1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, s105 ; encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, m0 ; encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, null ; encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, -1 ; encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] v_clz_i32_u32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] v_clz_i32_u32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_clz_i32_u32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cos_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xe1,0xd5,0x01,0x01,0x00,0x00] v_cos_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xe1,0xd5,0xff,0x01,0x00,0x00] v_cos_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xe1,0xd5,0x01,0x00,0x00,0x00] v_cos_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xe1,0xd5,0x69,0x00,0x00,0x00] v_cos_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe1,0xd5,0x6a,0x00,0x00,0x00] v_cos_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe1,0xd5,0x6b,0x00,0x00,0x00] v_cos_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe1,0xd5,0x7b,0x00,0x00,0x00] v_cos_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xe1,0xd5,0x7d,0x00,0x00,0x00] v_cos_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe1,0xd5,0x7e,0x00,0x00,0x00] v_cos_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe1,0xd5,0x7f,0x00,0x00,0x00] v_cos_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, null ; encoding: [0x05,0x00,0xe1,0xd5,0x7c,0x00,0x00,0x00] v_cos_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xe1,0xd5,0xc1,0x00,0x00,0x00] v_cos_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cos_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xe1,0xd5,0xf0,0x00,0x00,0x08] v_cos_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xe1,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cos_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xe1,0xd5,0xfd,0x00,0x00,0x10] v_cos_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xe1,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_cos_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xe1,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_cos_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xb6,0xd5,0x01,0x01,0x00,0x00] v_cos_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xb6,0xd5,0xff,0x01,0x00,0x00] v_cos_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xb6,0xd5,0x01,0x00,0x00,0x00] v_cos_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xb6,0xd5,0x69,0x00,0x00,0x00] v_cos_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb6,0xd5,0x6a,0x00,0x00,0x00] v_cos_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb6,0xd5,0x6b,0x00,0x00,0x00] v_cos_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb6,0xd5,0x7b,0x00,0x00,0x00] v_cos_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xb6,0xd5,0x7d,0x00,0x00,0x00] v_cos_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb6,0xd5,0x7e,0x00,0x00,0x00] v_cos_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb6,0xd5,0x7f,0x00,0x00,0x00] v_cos_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, null ; encoding: [0x05,0x00,0xb6,0xd5,0x7c,0x00,0x00,0x00] v_cos_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xb6,0xd5,0xc1,0x00,0x00,0x00] v_cos_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cos_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xb6,0xd5,0xf0,0x00,0x00,0x08] v_cos_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xb6,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cos_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xb6,0xd5,0xfd,0x00,0x00,0x10] v_cos_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xb6,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_cos_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xb6,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_ctz_i32_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] v_ctz_i32_b32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] v_ctz_i32_b32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, null ; encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] v_ctz_i32_b32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] v_ctz_i32_b32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_ctz_i32_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cvt_f32_bf8_e64 v1, s3 -// GFX12: encoding: [0x01,0x00,0xed,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, s3 ; encoding: [0x01,0x00,0xed,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, s3 byte_sel:1 -// GFX12: encoding: [0x01,0x10,0xed,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, s3 byte_sel:1 ; encoding: [0x01,0x10,0xed,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, s3 byte_sel:2 -// GFX12: encoding: [0x01,0x08,0xed,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, s3 byte_sel:2 ; encoding: [0x01,0x08,0xed,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, s3 byte_sel:3 -// GFX12: encoding: [0x01,0x18,0xed,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, s3 byte_sel:3 ; encoding: [0x01,0x18,0xed,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, 3 -// GFX12: encoding: [0x01,0x00,0xed,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, 3 ; encoding: [0x01,0x00,0xed,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, 3 byte_sel:1 -// GFX12: encoding: [0x01,0x10,0xed,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, 3 byte_sel:1 ; encoding: [0x01,0x10,0xed,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, 3 byte_sel:2 -// GFX12: encoding: [0x01,0x08,0xed,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, 3 byte_sel:2 ; encoding: [0x01,0x08,0xed,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, 3 byte_sel:3 -// GFX12: encoding: [0x01,0x18,0xed,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, 3 byte_sel:3 ; encoding: [0x01,0x18,0xed,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_bf8_e64 v1, v3 -// GFX12: encoding: [0x01,0x00,0xed,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, v3 ; encoding: [0x01,0x00,0xed,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_bf8_e64 v1, v3 byte_sel:1 -// GFX12: encoding: [0x01,0x10,0xed,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, v3 byte_sel:1 ; encoding: [0x01,0x10,0xed,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_bf8_e64 v1, v3 byte_sel:2 -// GFX12: encoding: [0x01,0x08,0xed,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, v3 byte_sel:2 ; encoding: [0x01,0x08,0xed,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_bf8_e64 v1, v3 byte_sel:3 -// GFX12: encoding: [0x01,0x18,0xed,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_bf8_e64 v1, v3 byte_sel:3 ; encoding: [0x01,0x18,0xed,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_fp8_e64 v1, s3 -// GFX12: encoding: [0x01,0x00,0xec,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, s3 ; encoding: [0x01,0x00,0xec,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, s3 byte_sel:1 -// GFX12: encoding: [0x01,0x10,0xec,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, s3 byte_sel:1 ; encoding: [0x01,0x10,0xec,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, s3 byte_sel:2 -// GFX12: encoding: [0x01,0x08,0xec,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, s3 byte_sel:2 ; encoding: [0x01,0x08,0xec,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, s3 byte_sel:3 -// GFX12: encoding: [0x01,0x18,0xec,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, s3 byte_sel:3 ; encoding: [0x01,0x18,0xec,0xd5,0x03,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, 3 -// GFX12: encoding: [0x01,0x00,0xec,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, 3 ; encoding: [0x01,0x00,0xec,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, 3 byte_sel:1 -// GFX12: encoding: [0x01,0x10,0xec,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, 3 byte_sel:1 ; encoding: [0x01,0x10,0xec,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, 3 byte_sel:2 -// GFX12: encoding: [0x01,0x08,0xec,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, 3 byte_sel:2 ; encoding: [0x01,0x08,0xec,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, 3 byte_sel:3 -// GFX12: encoding: [0x01,0x18,0xec,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, 3 byte_sel:3 ; encoding: [0x01,0x18,0xec,0xd5,0x83,0x00,0x00,0x00] v_cvt_f32_fp8_e64 v1, v3 -// GFX12: encoding: [0x01,0x00,0xec,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, v3 ; encoding: [0x01,0x00,0xec,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_fp8_e64 v1, v3 byte_sel:1 -// GFX12: encoding: [0x01,0x10,0xec,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, v3 byte_sel:1 ; encoding: [0x01,0x10,0xec,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_fp8_e64 v1, v3 byte_sel:2 -// GFX12: encoding: [0x01,0x08,0xec,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, v3 byte_sel:2 ; encoding: [0x01,0x08,0xec,0xd5,0x03,0x01,0x00,0x00] v_cvt_f32_fp8_e64 v1, v3 byte_sel:3 -// GFX12: encoding: [0x01,0x18,0xec,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_f32_fp8_e64 v1, v3 byte_sel:3 ; encoding: [0x01,0x18,0xec,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], s3 -// GFX12: encoding: [0x02,0x00,0xef,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], s3 ; encoding: [0x02,0x00,0xef,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], s3 op_sel:[1,0] -// GFX12: encoding: [0x02,0x08,0xef,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], s3 op_sel:[1,0] ; encoding: [0x02,0x08,0xef,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], 3 -// GFX12: encoding: [0x02,0x00,0xef,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], 3 ; encoding: [0x02,0x00,0xef,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], 3 op_sel:[1,0] -// GFX12: encoding: [0x02,0x08,0xef,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], 3 op_sel:[1,0] ; encoding: [0x02,0x08,0xef,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], v3 -// GFX12: encoding: [0x02,0x00,0xef,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], v3 ; encoding: [0x02,0x00,0xef,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], v3 op_sel:[1,0] -// GFX12: encoding: [0x02,0x08,0xef,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], v3 op_sel:[1,0] ; encoding: [0x02,0x08,0xef,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], v3.h -// GFX12: encoding: [0x02,0x08,0xef,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], v3.h op_sel:[1,0] ; encoding: [0x02,0x08,0xef,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[2:3], v255.h -// GFX12: encoding: [0x02,0x08,0xef,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[2:3], v255.h op_sel:[1,0] ; encoding: [0x02,0x08,0xef,0xd5,0xff,0x01,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[2:3], s3 -// GFX12: encoding: [0x02,0x00,0xee,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[2:3], s3 ; encoding: [0x02,0x00,0xee,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[2:3], s3 op_sel:[1,0] -// GFX12: encoding: [0x02,0x08,0xee,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[2:3], s3 op_sel:[1,0] ; encoding: [0x02,0x08,0xee,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[2:3], 3 -// GFX12: encoding: [0x02,0x00,0xee,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[2:3], 3 ; encoding: [0x02,0x00,0xee,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[2:3], 3 op_sel:[1,0] -// GFX12: encoding: [0x02,0x08,0xee,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[2:3], 3 op_sel:[1,0] ; encoding: [0x02,0x08,0xee,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[2:3], v3 -// GFX12: encoding: [0x02,0x00,0xee,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[2:3], v3 ; encoding: [0x02,0x00,0xee,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[2:3], v3 op_sel:[1,0] -// GFX12: encoding: [0x02,0x08,0xee,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[2:3], v3 op_sel:[1,0] ; encoding: [0x02,0x08,0xee,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[3:4], s3 -// GFX12: encoding: [0x03,0x00,0xef,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[3:4], s3 ; encoding: [0x03,0x00,0xef,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[3:4], s3 op_sel:[1,0] -// GFX12: encoding: [0x03,0x08,0xef,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[3:4], s3 op_sel:[1,0] ; encoding: [0x03,0x08,0xef,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[3:4], 3 op_sel:[1,0] -// GFX12: encoding: [0x03,0x08,0xef,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[3:4], 3 op_sel:[1,0] ; encoding: [0x03,0x08,0xef,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[3:4], v3 -// GFX12: encoding: [0x03,0x00,0xef,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[3:4], v3 ; encoding: [0x03,0x00,0xef,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_bf8_e64 v[3:4], v3 op_sel:[1,0] -// GFX12: encoding: [0x03,0x08,0xef,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_bf8_e64 v[3:4], v3 op_sel:[1,0] ; encoding: [0x03,0x08,0xef,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], s3 -// GFX12: encoding: [0x03,0x00,0xee,0xd5,0x03,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], s3 ; encoding: [0x03,0x00,0xee,0xd5,0x03,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], 3 -// GFX12: encoding: [0x03,0x00,0xee,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], 3 ; encoding: [0x03,0x00,0xee,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], 3 op_sel:[1,0] -// GFX12: encoding: [0x03,0x08,0xee,0xd5,0x83,0x00,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], 3 op_sel:[1,0] ; encoding: [0x03,0x08,0xee,0xd5,0x83,0x00,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], v3 -// GFX12: encoding: [0x03,0x00,0xee,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], v3 ; encoding: [0x03,0x00,0xee,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], v3 op_sel:[1,0] -// GFX12: encoding: [0x03,0x08,0xee,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], v3 op_sel:[1,0] ; encoding: [0x03,0x08,0xee,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], v3.h -// GFX12: encoding: [0x03,0x08,0xee,0xd5,0x03,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], v3.h op_sel:[1,0] ; encoding: [0x03,0x08,0xee,0xd5,0x03,0x01,0x00,0x00] v_cvt_pk_f32_fp8_e64 v[3:4], v255.h -// GFX12: encoding: [0x03,0x08,0xee,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_pk_f32_fp8_e64 v[3:4], v255.h op_sel:[1,0] ; encoding: [0x03,0x08,0xee,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_f32_e64 v5.l, v1 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5.l, v1 ; encoding: [0x05,0x00,0x8a,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_f32_e64 v5.l, v255 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5.l, v255 ; encoding: [0x05,0x00,0x8a,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8a,0xd5,0x01,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8a,0xd5,0x69,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8a,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8a,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8a,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8a,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8a,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8a,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, null ; encoding: [0x05,0x00,0x8a,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8a,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f16_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f16_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8a,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f16_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x8a,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f16_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x8a,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f16_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f16_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_cvt_f16_f32_e64 v255.h, -|0xaf123456| clamp div:2 -// GFX12: [0xff,0xc1,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f16_f32_e64 v255.h, -|0xaf123456| op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc1,0x8a,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_cvt_f16_i16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd1,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd1,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd1,0xd5,0x01,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd1,0xd5,0x69,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd1,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd1,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd1,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd1,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd1,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd1,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, null ; encoding: [0x05,0x00,0xd1,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd1,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f16_i16_e64 v5.l, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f16_i16_e64 v5.l, 0.5 mul:2 ; encoding: [0x05,0x00,0xd1,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f16_i16_e64 v5.l, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd1,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f16_i16_e64 v5.l, src_scc mul:4 ; encoding: [0x05,0x00,0xd1,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f16_i16_e64 v255.l, 0xfe0b clamp div:2 -// GFX12: encoding: [0xff,0x80,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v255.l, 0xfe0b clamp div:2 ; encoding: [0xff,0x80,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_i16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xd1,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd1,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_i16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xd1,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd1,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_i16_e64 v255.h, 0xfe0b clamp div:2 -// GFX12: [0xff,0xc0,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64 v255.h, 0xfe0b op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc0,0xd1,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd0,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd0,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd0,0xd5,0x01,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd0,0xd5,0x69,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd0,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd0,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd0,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd0,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd0,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd0,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, null ; encoding: [0x05,0x00,0xd0,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd0,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f16_u16_e64 v5.l, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f16_u16_e64 v5.l, 0.5 mul:2 ; encoding: [0x05,0x00,0xd0,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f16_u16_e64 v5.l, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd0,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f16_u16_e64 v5.l, src_scc mul:4 ; encoding: [0x05,0x00,0xd0,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f16_u16_e64 v255.l, 0xfe0b clamp div:2 -// GFX12: encoding: [0xff,0x80,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v255.l, 0xfe0b clamp div:2 ; encoding: [0xff,0x80,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f16_u16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd0,0xd5,0x01,0x01,0x00,0x00] v_cvt_f16_u16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd0,0xd5,0xff,0x01,0x00,0x00] v_cvt_f16_u16_e64 v255.h, 0xfe0b clamp div:2 -// GFX12: [0xff,0xc0,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64 v255.h, 0xfe0b op_sel:[0,1] clamp div:2 ; encoding: [0xff,0xc0,0xd0,0xd5,0xff,0x00,0x00,0x18,0x0b,0xfe,0x00,0x00] v_cvt_f32_f16_e64 v5, v1.l -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, v1.l ; encoding: [0x05,0x00,0x8b,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_f16_e64 v5, v255.l -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, v255.l ; encoding: [0x05,0x00,0x8b,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, s1 ; encoding: [0x05,0x00,0x8b,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, s105 ; encoding: [0x05,0x00,0x8b,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8b,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8b,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8b,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, m0 ; encoding: [0x05,0x00,0x8b,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8b,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8b,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, null ; encoding: [0x05,0x00,0x8b,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, -1 ; encoding: [0x05,0x00,0x8b,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8b,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x8b,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x8b,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0x8b,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0x8b,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_cvt_f32_f16_e64 v5, v255.h -// GFX12: [0x05,0x08,0x8b,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64 v5, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0x8b,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_f64_e64 v5, v[1:2] -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0x8f,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_f64_e64 v5, v[254:255] -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0x8f,0xd5,0xfe,0x01,0x00,0x00] v_cvt_f32_f64_e64 v5, s[2:3] -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0x8f,0xd5,0x02,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, s[104:105] -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0x8f,0xd5,0x68,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, vcc -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0x8f,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0x8f,0xd5,0x7a,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, exec -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, exec ; encoding: [0x05,0x00,0x8f,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, null ; encoding: [0x05,0x00,0x8f,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0x8f,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_f64_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x8f,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_f64_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8f,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_f64_e64 v5, -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0x8f,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_cvt_f32_f64_e64 v5, -|src_scc| mul:4 ; encoding: [0x05,0x01,0x8f,0xd5,0xfd,0x00,0x00,0x30] v_cvt_f32_f64_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x8f,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_f64_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x8f,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_i32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, v1 ; encoding: [0x05,0x00,0x85,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_i32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, v255 ; encoding: [0x05,0x00,0x85,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_i32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, s1 ; encoding: [0x05,0x00,0x85,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, s105 ; encoding: [0x05,0x00,0x85,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x85,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x85,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x85,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, m0 ; encoding: [0x05,0x00,0x85,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x85,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x85,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, null ; encoding: [0x05,0x00,0x85,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64 v5, -1 ; encoding: [0x05,0x00,0x85,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_i32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_i32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x85,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_i32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x85,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_i32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x85,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_i32_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x85,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_i32_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x85,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_u32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, v1 ; encoding: [0x05,0x00,0x86,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_u32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, v255 ; encoding: [0x05,0x00,0x86,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_u32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, s1 ; encoding: [0x05,0x00,0x86,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, s105 ; encoding: [0x05,0x00,0x86,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x86,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x86,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x86,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, m0 ; encoding: [0x05,0x00,0x86,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x86,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x86,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, null ; encoding: [0x05,0x00,0x86,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64 v5, -1 ; encoding: [0x05,0x00,0x86,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_u32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_u32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x86,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_u32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x86,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_u32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x86,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_u32_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x86,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_u32_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x86,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte0_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, v1 ; encoding: [0x05,0x00,0x91,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, v255 ; encoding: [0x05,0x00,0x91,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, s1 ; encoding: [0x05,0x00,0x91,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, s105 ; encoding: [0x05,0x00,0x91,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x91,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x91,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x91,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, m0 ; encoding: [0x05,0x00,0x91,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, exec_lo ; encoding: [0x05,0x00,0x91,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, exec_hi ; encoding: [0x05,0x00,0x91,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, null ; encoding: [0x05,0x00,0x91,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64 v5, -1 ; encoding: [0x05,0x00,0x91,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_ubyte0_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x91,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte0_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x91,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_ubyte0_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x91,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte0_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x91,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_ubyte0_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x91,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte1_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, v1 ; encoding: [0x05,0x00,0x92,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, v255 ; encoding: [0x05,0x00,0x92,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, s1 ; encoding: [0x05,0x00,0x92,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, s105 ; encoding: [0x05,0x00,0x92,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x92,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x92,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x92,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, m0 ; encoding: [0x05,0x00,0x92,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, exec_lo ; encoding: [0x05,0x00,0x92,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, exec_hi ; encoding: [0x05,0x00,0x92,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, null ; encoding: [0x05,0x00,0x92,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64 v5, -1 ; encoding: [0x05,0x00,0x92,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_ubyte1_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x92,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte1_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x92,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_ubyte1_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x92,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte1_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x92,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_ubyte1_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x92,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte2_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, v1 ; encoding: [0x05,0x00,0x93,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, v255 ; encoding: [0x05,0x00,0x93,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, s1 ; encoding: [0x05,0x00,0x93,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, s105 ; encoding: [0x05,0x00,0x93,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x93,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x93,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x93,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, m0 ; encoding: [0x05,0x00,0x93,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, exec_lo ; encoding: [0x05,0x00,0x93,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, exec_hi ; encoding: [0x05,0x00,0x93,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, null ; encoding: [0x05,0x00,0x93,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64 v5, -1 ; encoding: [0x05,0x00,0x93,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_ubyte2_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x93,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte2_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x93,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_ubyte2_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x93,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte2_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x93,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_ubyte2_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x93,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f32_ubyte3_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, v1 ; encoding: [0x05,0x00,0x94,0xd5,0x01,0x01,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, v255 ; encoding: [0x05,0x00,0x94,0xd5,0xff,0x01,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, s1 ; encoding: [0x05,0x00,0x94,0xd5,0x01,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, s105 ; encoding: [0x05,0x00,0x94,0xd5,0x69,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x94,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x94,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x94,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, m0 ; encoding: [0x05,0x00,0x94,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, exec_lo ; encoding: [0x05,0x00,0x94,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, exec_hi ; encoding: [0x05,0x00,0x94,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, null ; encoding: [0x05,0x00,0x94,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64 v5, -1 ; encoding: [0x05,0x00,0x94,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f32_ubyte3_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x94,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f32_ubyte3_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x94,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f32_ubyte3_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x94,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f32_ubyte3_e64 v255, 0xaf123456 clamp div:2 -// GFX12: encoding: [0xff,0x80,0x94,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f32_ubyte3_e64 v255, 0xaf123456 clamp div:2 ; encoding: [0xff,0x80,0x94,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f64_f32_e64 v[5:6], v1 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], v1 ; encoding: [0x05,0x00,0x90,0xd5,0x01,0x01,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], v255 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], v255 ; encoding: [0x05,0x00,0x90,0xd5,0xff,0x01,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], s1 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], s1 ; encoding: [0x05,0x00,0x90,0xd5,0x01,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], s105 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], s105 ; encoding: [0x05,0x00,0x90,0xd5,0x69,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], vcc_lo -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], vcc_lo ; encoding: [0x05,0x00,0x90,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], vcc_hi -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], vcc_hi ; encoding: [0x05,0x00,0x90,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], ttmp15 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], ttmp15 ; encoding: [0x05,0x00,0x90,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], m0 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], m0 ; encoding: [0x05,0x00,0x90,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], exec_lo -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], exec_lo ; encoding: [0x05,0x00,0x90,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], exec_hi -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], exec_hi ; encoding: [0x05,0x00,0x90,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], null ; encoding: [0x05,0x00,0x90,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f64_f32_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x90,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f64_f32_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f64_f32_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x90,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f64_f32_e64 v[5:6], src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x90,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f64_f32_e64 v[5:6], src_scc mul:4 ; encoding: [0x05,0x00,0x90,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f64_f32_e64 v[254:255], -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xfe,0x81,0x90,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f64_f32_e64 v[254:255], -|0xaf123456| clamp div:2 ; encoding: [0xfe,0x81,0x90,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_cvt_f64_i32_e64 v[5:6], v1 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], v1 ; encoding: [0x05,0x00,0x84,0xd5,0x01,0x01,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], v255 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], v255 ; encoding: [0x05,0x00,0x84,0xd5,0xff,0x01,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], s1 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], s1 ; encoding: [0x05,0x00,0x84,0xd5,0x01,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], s105 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], s105 ; encoding: [0x05,0x00,0x84,0xd5,0x69,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], vcc_lo -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], vcc_lo ; encoding: [0x05,0x00,0x84,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], vcc_hi -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], vcc_hi ; encoding: [0x05,0x00,0x84,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], ttmp15 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], ttmp15 ; encoding: [0x05,0x00,0x84,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], m0 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], m0 ; encoding: [0x05,0x00,0x84,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], exec_lo -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], exec_lo ; encoding: [0x05,0x00,0x84,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], exec_hi -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], exec_hi ; encoding: [0x05,0x00,0x84,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], null ; encoding: [0x05,0x00,0x84,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f64_i32_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x84,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f64_i32_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f64_i32_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x84,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f64_i32_e64 v[5:6], src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x84,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f64_i32_e64 v[5:6], src_scc mul:4 ; encoding: [0x05,0x00,0x84,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f64_i32_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0x84,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f64_i32_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x84,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_f64_u32_e64 v[5:6], v1 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], v1 ; encoding: [0x05,0x00,0x96,0xd5,0x01,0x01,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], v255 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], v255 ; encoding: [0x05,0x00,0x96,0xd5,0xff,0x01,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], s1 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], s1 ; encoding: [0x05,0x00,0x96,0xd5,0x01,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], s105 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], s105 ; encoding: [0x05,0x00,0x96,0xd5,0x69,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], vcc_lo -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], vcc_lo ; encoding: [0x05,0x00,0x96,0xd5,0x6a,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], vcc_hi -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], vcc_hi ; encoding: [0x05,0x00,0x96,0xd5,0x6b,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], ttmp15 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], ttmp15 ; encoding: [0x05,0x00,0x96,0xd5,0x7b,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], m0 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], m0 ; encoding: [0x05,0x00,0x96,0xd5,0x7d,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], exec_lo -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], exec_lo ; encoding: [0x05,0x00,0x96,0xd5,0x7e,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], exec_hi -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], exec_hi ; encoding: [0x05,0x00,0x96,0xd5,0x7f,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], null ; encoding: [0x05,0x00,0x96,0xd5,0x7c,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_f64_u32_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x96,0xd5,0xc1,0x00,0x00,0x00] v_cvt_f64_u32_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_f64_u32_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x96,0xd5,0xf0,0x00,0x00,0x08] v_cvt_f64_u32_e64 v[5:6], src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x96,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_f64_u32_e64 v[5:6], src_scc mul:4 ; encoding: [0x05,0x00,0x96,0xd5,0xfd,0x00,0x00,0x10] v_cvt_f64_u32_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0x96,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_f64_u32_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x96,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_cvt_floor_i32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64 v255, -|0xaf123456| -// GFX12: encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_floor_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_flr_i32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x01,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8d,0xd5,0xff,0x01,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8d,0xd5,0x01,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8d,0xd5,0x69,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x6a,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x6b,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8d,0xd5,0x7b,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8d,0xd5,0x7d,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8d,0xd5,0x7e,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8d,0xd5,0x7f,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8d,0xd5,0x7c,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8d,0xd5,0xc1,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8d,0xd5,0xf0,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8d,0xd5,0xfd,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64 v255, -|0xaf123456| -// GFX12: encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_floor_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8d,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_i16_f16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd3,0xd5,0x01,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd3,0xd5,0xff,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd3,0xd5,0x01,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd3,0xd5,0x69,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd3,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd3,0xd5,0x6b,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd3,0xd5,0x7b,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd3,0xd5,0x7d,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd3,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd3,0xd5,0x7f,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xd3,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd3,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, 0.5 -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xd3,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i16_f16_e64 v5.l, src_scc -// GFX12: encoding: [0x05,0x00,0xd3,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xd3,0xd5,0xfd,0x00,0x00,0x00] v_cvt_i16_f16_e64 v255.l, -|0xfe0b| clamp -// GFX12: encoding: [0xff,0x81,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v255.l, -|0xfe0b| clamp ; encoding: [0xff,0x81,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_i16_f16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xd3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd3,0xd5,0x01,0x01,0x00,0x00] v_cvt_i16_f16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xd3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd3,0xd5,0xff,0x01,0x00,0x00] v_cvt_i16_f16_e64 v255.h, -|0xfe0b| clamp -// GFX12: [0xff,0xc1,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] clamp ; encoding: [0xff,0xc1,0xd3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_i32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x88,0xd5,0x01,0x01,0x00,0x00] v_cvt_i32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x88,0xd5,0xff,0x01,0x00,0x00] v_cvt_i32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x88,0xd5,0x01,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x88,0xd5,0x69,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x88,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x88,0xd5,0x6b,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x88,0xd5,0x7b,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x88,0xd5,0x7d,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x88,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x88,0xd5,0x7f,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x88,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x88,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x88,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x88,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x88,0xd5,0xfd,0x00,0x00,0x00] v_cvt_i32_f32_e64 v255, -|0xaf123456| clamp -// GFX12: encoding: [0xff,0x81,0x88,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_i32_f32_e64 v255, -|0xaf123456| clamp ; encoding: [0xff,0x81,0x88,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_i32_f64_e64 v5, v[1:2] -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0x83,0xd5,0x01,0x01,0x00,0x00] v_cvt_i32_f64_e64 v5, v[254:255] -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0x83,0xd5,0xfe,0x01,0x00,0x00] v_cvt_i32_f64_e64 v5, s[2:3] -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0x83,0xd5,0x02,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, s[104:105] -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0x83,0xd5,0x68,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, vcc -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0x83,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0x83,0xd5,0x7a,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, exec -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, exec ; encoding: [0x05,0x00,0x83,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, null ; encoding: [0x05,0x00,0x83,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0x83,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x83,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f64_e64 v5, 0.5 ; encoding: [0x05,0x00,0x83,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i32_f64_e64 v5, -|src_scc| -// GFX12: encoding: [0x05,0x01,0x83,0xd5,0xfd,0x00,0x00,0x20] +// GFX12: v_cvt_i32_f64_e64 v5, -|src_scc| ; encoding: [0x05,0x01,0x83,0xd5,0xfd,0x00,0x00,0x20] v_cvt_i32_f64_e64 v255, 0xaf123456 clamp -// GFX12: encoding: [0xff,0x80,0x83,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_i32_f64_e64 v255, 0xaf123456 clamp ; encoding: [0xff,0x80,0x83,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cvt_i32_i16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, v1 ; encoding: [0x05,0x00,0xea,0xd5,0x01,0x01,0x00,0x00] v_cvt_i32_i16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, v255 ; encoding: [0x05,0x00,0xea,0xd5,0xff,0x01,0x00,0x00] v_cvt_i32_i16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, s1 ; encoding: [0x05,0x00,0xea,0xd5,0x01,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, s105 ; encoding: [0x05,0x00,0xea,0xd5,0x69,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xea,0xd5,0x6a,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xea,0xd5,0x6b,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xea,0xd5,0x7b,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, m0 ; encoding: [0x05,0x00,0xea,0xd5,0x7d,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xea,0xd5,0x7e,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xea,0xd5,0x7f,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, null ; encoding: [0x05,0x00,0xea,0xd5,0x7c,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, -1 ; encoding: [0x05,0x00,0xea,0xd5,0xc1,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xea,0xd5,0xf0,0x00,0x00,0x00] v_cvt_i32_i16_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xea,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v5, src_scc ; encoding: [0x05,0x00,0xea,0xd5,0xfd,0x00,0x00,0x00] v_cvt_i32_i16_e64 v255, 0xfe0b -// GFX12: encoding: [0xff,0x00,0xea,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xea,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64 v255, -|0xaf123456| -// GFX12: encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_nearest_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_norm_i16_f16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xe3,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xe3,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xe3,0xd5,0x01,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xe3,0xd5,0x69,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xe3,0xd5,0x6a,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xe3,0xd5,0x6b,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xe3,0xd5,0x7b,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xe3,0xd5,0x7d,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xe3,0xd5,0x7e,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xe3,0xd5,0x7f,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xe3,0xd5,0x7c,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xe3,0xd5,0xc1,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, 0.5 -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xe3,0xd5,0xf0,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, src_scc -// GFX12: encoding: [0x05,0x00,0xe3,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xe3,0xd5,0xfd,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64 v255.l, -|0xfe0b| -// GFX12: encoding: [0xff,0x01,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v255.l, -|0xfe0b| ; encoding: [0xff,0x01,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xe3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xe3,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xe3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xe3,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_i16_f16_e64 v255.h, -|0xfe0b| -// GFX12: [0xff,0x41,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xe3,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xe4,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xe4,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xe4,0xd5,0x01,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xe4,0xd5,0x69,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xe4,0xd5,0x6a,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xe4,0xd5,0x6b,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xe4,0xd5,0x7b,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xe4,0xd5,0x7d,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xe4,0xd5,0x7e,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xe4,0xd5,0x7f,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xe4,0xd5,0x7c,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xe4,0xd5,0xc1,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, 0.5 -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xe4,0xd5,0xf0,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, src_scc -// GFX12: encoding: [0x05,0x00,0xe4,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xe4,0xd5,0xfd,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64 v255.l, -|0xfe0b| -// GFX12: encoding: [0xff,0x01,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v255.l, -|0xfe0b| ; encoding: [0xff,0x01,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xe4,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xe4,0xd5,0x01,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xe4,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xe4,0xd5,0xff,0x01,0x00,0x00] v_cvt_norm_u16_f16_e64 v255.h, -|0xfe0b| -// GFX12: [0xff,0x41,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xe4,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_off_f32_i4_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, v1 ; encoding: [0x05,0x00,0x8e,0xd5,0x01,0x01,0x00,0x00] v_cvt_off_f32_i4_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, v255 ; encoding: [0x05,0x00,0x8e,0xd5,0xff,0x01,0x00,0x00] v_cvt_off_f32_i4_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, s1 ; encoding: [0x05,0x00,0x8e,0xd5,0x01,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, s105 ; encoding: [0x05,0x00,0x8e,0xd5,0x69,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8e,0xd5,0x6a,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8e,0xd5,0x6b,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8e,0xd5,0x7b,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, m0 ; encoding: [0x05,0x00,0x8e,0xd5,0x7d,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8e,0xd5,0x7e,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8e,0xd5,0x7f,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, null ; encoding: [0x05,0x00,0x8e,0xd5,0x7c,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v5, -1 ; encoding: [0x05,0x00,0x8e,0xd5,0xc1,0x00,0x00,0x00] v_cvt_off_f32_i4_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_cvt_off_f32_i4_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0x8e,0xd5,0xf0,0x00,0x00,0x08] v_cvt_off_f32_i4_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0x8e,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_cvt_off_f32_i4_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0x8e,0xd5,0xfd,0x00,0x00,0x10] v_cvt_off_f32_i4_e64 v255, 0x4f clamp div:2 -// GFX12: encoding: [0xff,0x80,0x8e,0xd5,0xff,0x00,0x00,0x18,0x4f,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64 v255, 0x4f clamp div:2 ; encoding: [0xff,0x80,0x8e,0xd5,0xff,0x00,0x00,0x18,0x4f,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x01,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x8c,0xd5,0xff,0x01,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x8c,0xd5,0x01,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x8c,0xd5,0x69,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x6a,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x6b,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x8c,0xd5,0x7b,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x8c,0xd5,0x7d,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x8c,0xd5,0x7e,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x8c,0xd5,0x7f,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0x8c,0xd5,0x7c,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x8c,0xd5,0xc1,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x8c,0xd5,0xf0,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x8c,0xd5,0xfd,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64 v255, -|0xaf123456| -// GFX12: encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_nearest_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0x8c,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_u16_f16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xd2,0xd5,0x01,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xd2,0xd5,0xff,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xd2,0xd5,0x01,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xd2,0xd5,0x69,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xd2,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xd2,0xd5,0x6b,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xd2,0xd5,0x7b,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xd2,0xd5,0x7d,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xd2,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xd2,0xd5,0x7f,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xd2,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xd2,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, 0.5 -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xd2,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u16_f16_e64 v5.l, src_scc -// GFX12: encoding: [0x05,0x00,0xd2,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xd2,0xd5,0xfd,0x00,0x00,0x00] v_cvt_u16_f16_e64 v255.l, -|0xfe0b| clamp -// GFX12: encoding: [0xff,0x81,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v255.l, -|0xfe0b| clamp ; encoding: [0xff,0x81,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_u16_f16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xd2,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xd2,0xd5,0x01,0x01,0x00,0x00] v_cvt_u16_f16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xd2,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xd2,0xd5,0xff,0x01,0x00,0x00] v_cvt_u16_f16_e64 v255.h, -|0xfe0b| clamp -// GFX12: [0xff,0xc1,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] clamp ; encoding: [0xff,0xc1,0xd2,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_cvt_u32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0x87,0xd5,0x01,0x01,0x00,0x00] v_cvt_u32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0x87,0xd5,0xff,0x01,0x00,0x00] v_cvt_u32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0x87,0xd5,0x01,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0x87,0xd5,0x69,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x87,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x87,0xd5,0x6b,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x87,0xd5,0x7b,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0x87,0xd5,0x7d,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x87,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x87,0xd5,0x7f,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, null ; encoding: [0x05,0x00,0x87,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0x87,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x87,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x87,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0x87,0xd5,0xfd,0x00,0x00,0x00] v_cvt_u32_f32_e64 v255, -|0xaf123456| clamp -// GFX12: encoding: [0xff,0x81,0x87,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_u32_f32_e64 v255, -|0xaf123456| clamp ; encoding: [0xff,0x81,0x87,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_cvt_u32_f64_e64 v5, v[1:2] -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0x95,0xd5,0x01,0x01,0x00,0x00] v_cvt_u32_f64_e64 v5, v[254:255] -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0x95,0xd5,0xfe,0x01,0x00,0x00] v_cvt_u32_f64_e64 v5, s[2:3] -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0x95,0xd5,0x02,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, s[104:105] -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0x95,0xd5,0x68,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, vcc -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0x95,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0x95,0xd5,0x7a,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, exec -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, exec ; encoding: [0x05,0x00,0x95,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, null ; encoding: [0x05,0x00,0x95,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0x95,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x95,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f64_e64 v5, 0.5 ; encoding: [0x05,0x00,0x95,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u32_f64_e64 v5, -|src_scc| -// GFX12: encoding: [0x05,0x01,0x95,0xd5,0xfd,0x00,0x00,0x20] +// GFX12: v_cvt_u32_f64_e64 v5, -|src_scc| ; encoding: [0x05,0x01,0x95,0xd5,0xfd,0x00,0x00,0x20] v_cvt_u32_f64_e64 v255, 0xaf123456 clamp -// GFX12: encoding: [0xff,0x80,0x95,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_cvt_u32_f64_e64 v255, 0xaf123456 clamp ; encoding: [0xff,0x80,0x95,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_cvt_u32_u16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, v1 ; encoding: [0x05,0x00,0xeb,0xd5,0x01,0x01,0x00,0x00] v_cvt_u32_u16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, v255 ; encoding: [0x05,0x00,0xeb,0xd5,0xff,0x01,0x00,0x00] v_cvt_u32_u16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, s1 ; encoding: [0x05,0x00,0xeb,0xd5,0x01,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, s105 ; encoding: [0x05,0x00,0xeb,0xd5,0x69,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xeb,0xd5,0x6a,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xeb,0xd5,0x6b,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xeb,0xd5,0x7b,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, m0 ; encoding: [0x05,0x00,0xeb,0xd5,0x7d,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xeb,0xd5,0x7e,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xeb,0xd5,0x7f,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, null ; encoding: [0x05,0x00,0xeb,0xd5,0x7c,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, -1 ; encoding: [0x05,0x00,0xeb,0xd5,0xc1,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xeb,0xd5,0xf0,0x00,0x00,0x00] v_cvt_u32_u16_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xeb,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v5, src_scc ; encoding: [0x05,0x00,0xeb,0xd5,0xfd,0x00,0x00,0x00] v_cvt_u32_u16_e64 v255, 0xfe0b -// GFX12: encoding: [0xff,0x00,0xeb,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xeb,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_exp_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd8,0xd5,0x01,0x01,0x00,0x00] v_exp_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd8,0xd5,0xff,0x01,0x00,0x00] v_exp_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd8,0xd5,0x01,0x00,0x00,0x00] v_exp_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd8,0xd5,0x69,0x00,0x00,0x00] v_exp_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd8,0xd5,0x6a,0x00,0x00,0x00] v_exp_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd8,0xd5,0x6b,0x00,0x00,0x00] v_exp_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd8,0xd5,0x7b,0x00,0x00,0x00] v_exp_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd8,0xd5,0x7d,0x00,0x00,0x00] v_exp_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd8,0xd5,0x7e,0x00,0x00,0x00] v_exp_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd8,0xd5,0x7f,0x00,0x00,0x00] v_exp_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, null ; encoding: [0x05,0x00,0xd8,0xd5,0x7c,0x00,0x00,0x00] v_exp_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd8,0xd5,0xc1,0x00,0x00,0x00] v_exp_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_exp_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd8,0xd5,0xf0,0x00,0x00,0x08] v_exp_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd8,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_exp_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd8,0xd5,0xfd,0x00,0x00,0x10] v_exp_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xd8,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_exp_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd8,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_exp_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa5,0xd5,0x01,0x01,0x00,0x00] v_exp_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa5,0xd5,0xff,0x01,0x00,0x00] v_exp_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa5,0xd5,0x01,0x00,0x00,0x00] v_exp_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa5,0xd5,0x69,0x00,0x00,0x00] v_exp_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa5,0xd5,0x6a,0x00,0x00,0x00] v_exp_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa5,0xd5,0x6b,0x00,0x00,0x00] v_exp_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa5,0xd5,0x7b,0x00,0x00,0x00] v_exp_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa5,0xd5,0x7d,0x00,0x00,0x00] v_exp_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa5,0xd5,0x7e,0x00,0x00,0x00] v_exp_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa5,0xd5,0x7f,0x00,0x00,0x00] v_exp_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, null ; encoding: [0x05,0x00,0xa5,0xd5,0x7c,0x00,0x00,0x00] v_exp_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa5,0xd5,0xc1,0x00,0x00,0x00] v_exp_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_exp_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa5,0xd5,0xf0,0x00,0x00,0x08] v_exp_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa5,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_exp_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa5,0xd5,0xfd,0x00,0x00,0x10] v_exp_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_exp_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_ffbh_i32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, v1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x01,0x00,0x00] v_ffbh_i32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, v255 ; encoding: [0x05,0x00,0xbb,0xd5,0xff,0x01,0x00,0x00] v_ffbh_i32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, s1 ; encoding: [0x05,0x00,0xbb,0xd5,0x01,0x00,0x00,0x00] v_ffbh_i32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, s105 ; encoding: [0x05,0x00,0xbb,0xd5,0x69,0x00,0x00,0x00] v_ffbh_i32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x6a,0x00,0x00,0x00] v_ffbh_i32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x6b,0x00,0x00,0x00] v_ffbh_i32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xbb,0xd5,0x7b,0x00,0x00,0x00] v_ffbh_i32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, m0 ; encoding: [0x05,0x00,0xbb,0xd5,0x7d,0x00,0x00,0x00] v_ffbh_i32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xbb,0xd5,0x7e,0x00,0x00,0x00] v_ffbh_i32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xbb,0xd5,0x7f,0x00,0x00,0x00] v_ffbh_i32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, null ; encoding: [0x05,0x00,0xbb,0xd5,0x7c,0x00,0x00,0x00] v_ffbh_i32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, -1 ; encoding: [0x05,0x00,0xbb,0xd5,0xc1,0x00,0x00,0x00] v_ffbh_i32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbb,0xd5,0xf0,0x00,0x00,0x00] v_ffbh_i32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64 v5, src_scc ; encoding: [0x05,0x00,0xbb,0xd5,0xfd,0x00,0x00,0x00] v_ffbh_i32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_cls_i32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xbb,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_ffbh_u32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, v1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x01,0x00,0x00] v_ffbh_u32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, v255 ; encoding: [0x05,0x00,0xb9,0xd5,0xff,0x01,0x00,0x00] v_ffbh_u32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, s1 ; encoding: [0x05,0x00,0xb9,0xd5,0x01,0x00,0x00,0x00] v_ffbh_u32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, s105 ; encoding: [0x05,0x00,0xb9,0xd5,0x69,0x00,0x00,0x00] v_ffbh_u32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x6a,0x00,0x00,0x00] v_ffbh_u32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x6b,0x00,0x00,0x00] v_ffbh_u32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb9,0xd5,0x7b,0x00,0x00,0x00] v_ffbh_u32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, m0 ; encoding: [0x05,0x00,0xb9,0xd5,0x7d,0x00,0x00,0x00] v_ffbh_u32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb9,0xd5,0x7e,0x00,0x00,0x00] v_ffbh_u32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb9,0xd5,0x7f,0x00,0x00,0x00] v_ffbh_u32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, null ; encoding: [0x05,0x00,0xb9,0xd5,0x7c,0x00,0x00,0x00] v_ffbh_u32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, -1 ; encoding: [0x05,0x00,0xb9,0xd5,0xc1,0x00,0x00,0x00] v_ffbh_u32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb9,0xd5,0xf0,0x00,0x00,0x00] v_ffbh_u32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb9,0xd5,0xfd,0x00,0x00,0x00] v_ffbh_u32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_clz_i32_u32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb9,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_ffbl_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x01,0x00,0x00] v_ffbl_b32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xba,0xd5,0xff,0x01,0x00,0x00] v_ffbl_b32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xba,0xd5,0x01,0x00,0x00,0x00] v_ffbl_b32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xba,0xd5,0x69,0x00,0x00,0x00] v_ffbl_b32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xba,0xd5,0x6a,0x00,0x00,0x00] v_ffbl_b32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xba,0xd5,0x6b,0x00,0x00,0x00] v_ffbl_b32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xba,0xd5,0x7b,0x00,0x00,0x00] v_ffbl_b32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xba,0xd5,0x7d,0x00,0x00,0x00] v_ffbl_b32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xba,0xd5,0x7e,0x00,0x00,0x00] v_ffbl_b32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xba,0xd5,0x7f,0x00,0x00,0x00] v_ffbl_b32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, null ; encoding: [0x05,0x00,0xba,0xd5,0x7c,0x00,0x00,0x00] v_ffbl_b32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xba,0xd5,0xc1,0x00,0x00,0x00] v_ffbl_b32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xba,0xd5,0xf0,0x00,0x00,0x00] v_ffbl_b32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xba,0xd5,0xfd,0x00,0x00,0x00] v_ffbl_b32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_ctz_i32_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xba,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_floor_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdb,0xd5,0x01,0x01,0x00,0x00] v_floor_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdb,0xd5,0xff,0x01,0x00,0x00] v_floor_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdb,0xd5,0x01,0x00,0x00,0x00] v_floor_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdb,0xd5,0x69,0x00,0x00,0x00] v_floor_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdb,0xd5,0x6a,0x00,0x00,0x00] v_floor_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdb,0xd5,0x6b,0x00,0x00,0x00] v_floor_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdb,0xd5,0x7b,0x00,0x00,0x00] v_floor_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdb,0xd5,0x7d,0x00,0x00,0x00] v_floor_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdb,0xd5,0x7e,0x00,0x00,0x00] v_floor_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdb,0xd5,0x7f,0x00,0x00,0x00] v_floor_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, null ; encoding: [0x05,0x00,0xdb,0xd5,0x7c,0x00,0x00,0x00] v_floor_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdb,0xd5,0xc1,0x00,0x00,0x00] v_floor_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_floor_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdb,0xd5,0xf0,0x00,0x00,0x08] v_floor_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xdb,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_floor_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdb,0xd5,0xfd,0x00,0x00,0x10] v_floor_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xdb,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_floor_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdb,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_floor_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa4,0xd5,0x01,0x01,0x00,0x00] v_floor_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa4,0xd5,0xff,0x01,0x00,0x00] v_floor_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa4,0xd5,0x01,0x00,0x00,0x00] v_floor_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa4,0xd5,0x69,0x00,0x00,0x00] v_floor_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa4,0xd5,0x6a,0x00,0x00,0x00] v_floor_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa4,0xd5,0x6b,0x00,0x00,0x00] v_floor_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa4,0xd5,0x7b,0x00,0x00,0x00] v_floor_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa4,0xd5,0x7d,0x00,0x00,0x00] v_floor_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa4,0xd5,0x7e,0x00,0x00,0x00] v_floor_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa4,0xd5,0x7f,0x00,0x00,0x00] v_floor_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, null ; encoding: [0x05,0x00,0xa4,0xd5,0x7c,0x00,0x00,0x00] v_floor_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa4,0xd5,0xc1,0x00,0x00,0x00] v_floor_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_floor_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa4,0xd5,0xf0,0x00,0x00,0x08] v_floor_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa4,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_floor_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa4,0xd5,0xfd,0x00,0x00,0x10] v_floor_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa4,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_floor_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa4,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_floor_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x9a,0xd5,0x01,0x01,0x00,0x00] v_floor_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x9a,0xd5,0xfe,0x01,0x00,0x00] v_floor_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x9a,0xd5,0x02,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x9a,0xd5,0x68,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x9a,0xd5,0x6a,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x9a,0xd5,0x7a,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x9a,0xd5,0x7e,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x9a,0xd5,0x7c,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_floor_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x9a,0xd5,0xc1,0x00,0x00,0x00] v_floor_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x9a,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_floor_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x9a,0xd5,0xf0,0x00,0x00,0x08] v_floor_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0x9a,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_floor_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x9a,0xd5,0xfd,0x00,0x00,0x30] v_floor_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0x9a,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_floor_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x9a,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_fract_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdf,0xd5,0x01,0x01,0x00,0x00] v_fract_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdf,0xd5,0xff,0x01,0x00,0x00] v_fract_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdf,0xd5,0x01,0x00,0x00,0x00] v_fract_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdf,0xd5,0x69,0x00,0x00,0x00] v_fract_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdf,0xd5,0x6a,0x00,0x00,0x00] v_fract_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdf,0xd5,0x6b,0x00,0x00,0x00] v_fract_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdf,0xd5,0x7b,0x00,0x00,0x00] v_fract_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdf,0xd5,0x7d,0x00,0x00,0x00] v_fract_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdf,0xd5,0x7e,0x00,0x00,0x00] v_fract_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdf,0xd5,0x7f,0x00,0x00,0x00] v_fract_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, null ; encoding: [0x05,0x00,0xdf,0xd5,0x7c,0x00,0x00,0x00] v_fract_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdf,0xd5,0xc1,0x00,0x00,0x00] v_fract_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_fract_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdf,0xd5,0xf0,0x00,0x00,0x08] v_fract_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xdf,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_fract_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdf,0xd5,0xfd,0x00,0x00,0x10] v_fract_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xdf,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_fract_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdf,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_fract_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa0,0xd5,0x01,0x01,0x00,0x00] v_fract_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa0,0xd5,0xff,0x01,0x00,0x00] v_fract_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa0,0xd5,0x01,0x00,0x00,0x00] v_fract_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa0,0xd5,0x69,0x00,0x00,0x00] v_fract_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa0,0xd5,0x6a,0x00,0x00,0x00] v_fract_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa0,0xd5,0x6b,0x00,0x00,0x00] v_fract_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa0,0xd5,0x7b,0x00,0x00,0x00] v_fract_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa0,0xd5,0x7d,0x00,0x00,0x00] v_fract_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa0,0xd5,0x7e,0x00,0x00,0x00] v_fract_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa0,0xd5,0x7f,0x00,0x00,0x00] v_fract_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, null ; encoding: [0x05,0x00,0xa0,0xd5,0x7c,0x00,0x00,0x00] v_fract_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa0,0xd5,0xc1,0x00,0x00,0x00] v_fract_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_fract_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa0,0xd5,0xf0,0x00,0x00,0x08] v_fract_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa0,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_fract_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa0,0xd5,0xfd,0x00,0x00,0x10] v_fract_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_fract_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_fract_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xbe,0xd5,0x01,0x01,0x00,0x00] v_fract_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xbe,0xd5,0xfe,0x01,0x00,0x00] v_fract_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xbe,0xd5,0x02,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xbe,0xd5,0x68,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xbe,0xd5,0x6a,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xbe,0xd5,0x7a,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xbe,0xd5,0x7e,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xbe,0xd5,0x7c,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_fract_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xbe,0xd5,0xc1,0x00,0x00,0x00] v_fract_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xbe,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_fract_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xbe,0xd5,0xf0,0x00,0x00,0x08] v_fract_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0xbe,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_fract_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xbe,0xd5,0xfd,0x00,0x00,0x30] v_fract_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0xbe,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_fract_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xbe,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_frexp_exp_i16_f16_e64 v5.l, v1.l -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, v1.l ; encoding: [0x05,0x00,0xda,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, v255.l -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, v255.l ; encoding: [0x05,0x00,0xda,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, s1 -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, s1 ; encoding: [0x05,0x00,0xda,0xd5,0x01,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, s105 -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, s105 ; encoding: [0x05,0x00,0xda,0xd5,0x69,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, vcc_lo -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, vcc_lo ; encoding: [0x05,0x00,0xda,0xd5,0x6a,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, vcc_hi -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, vcc_hi ; encoding: [0x05,0x00,0xda,0xd5,0x6b,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, ttmp15 -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, ttmp15 ; encoding: [0x05,0x00,0xda,0xd5,0x7b,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, m0 -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, m0 ; encoding: [0x05,0x00,0xda,0xd5,0x7d,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, exec_lo -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, exec_lo ; encoding: [0x05,0x00,0xda,0xd5,0x7e,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, exec_hi -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, exec_hi ; encoding: [0x05,0x00,0xda,0xd5,0x7f,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, null -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, null ; encoding: [0x05,0x00,0xda,0xd5,0x7c,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, -1 -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, -1 ; encoding: [0x05,0x00,0xda,0xd5,0xc1,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, 0.5 -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, 0.5 ; encoding: [0x05,0x00,0xda,0xd5,0xf0,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, src_scc -// GFX12: encoding: [0x05,0x00,0xda,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, src_scc ; encoding: [0x05,0x00,0xda,0xd5,0xfd,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64 v255.l, -|0xfe0b| -// GFX12: encoding: [0xff,0x01,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v255.l, -|0xfe0b| ; encoding: [0xff,0x01,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.h, v1.h -// GFX12: [0x05,0x48,0xda,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.h, v1.h op_sel:[1,1] ; encoding: [0x05,0x48,0xda,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v5.l, v255.h -// GFX12: [0x05,0x08,0xda,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v5.l, v255.h op_sel:[1,0] ; encoding: [0x05,0x08,0xda,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i16_f16_e64 v255.h, -|0xfe0b| -// GFX12: [0xff,0x41,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64 v255.h, -|0xfe0b| op_sel:[0,1] ; encoding: [0xff,0x41,0xda,0xd5,0xff,0x00,0x00,0x20,0x0b,0xfe,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xbf,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xbf,0xd5,0xff,0x01,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xbf,0xd5,0x01,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xbf,0xd5,0x69,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xbf,0xd5,0x6a,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xbf,0xd5,0x6b,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xbf,0xd5,0x7b,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xbf,0xd5,0x7d,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xbf,0xd5,0x7e,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xbf,0xd5,0x7f,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, null ; encoding: [0x05,0x00,0xbf,0xd5,0x7c,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xbf,0xd5,0xc1,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbf,0xd5,0xf0,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xbf,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64 v5, src_scc ; encoding: [0x05,0x00,0xbf,0xd5,0xfd,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64 v255, -|0xaf123456| -// GFX12: encoding: [0xff,0x01,0xbf,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] +// GFX12: v_frexp_exp_i32_f32_e64 v255, -|0xaf123456| ; encoding: [0xff,0x01,0xbf,0xd5,0xff,0x00,0x00,0x20,0x56,0x34,0x12,0xaf] v_frexp_exp_i32_f64_e64 v5, v[1:2] -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, v[1:2] ; encoding: [0x05,0x00,0xbc,0xd5,0x01,0x01,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, v[254:255] -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, v[254:255] ; encoding: [0x05,0x00,0xbc,0xd5,0xfe,0x01,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, s[2:3] -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, s[2:3] ; encoding: [0x05,0x00,0xbc,0xd5,0x02,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, s[104:105] -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, s[104:105] ; encoding: [0x05,0x00,0xbc,0xd5,0x68,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, vcc -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, vcc ; encoding: [0x05,0x00,0xbc,0xd5,0x6a,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, ttmp[14:15] ; encoding: [0x05,0x00,0xbc,0xd5,0x7a,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, exec -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, exec ; encoding: [0x05,0x00,0xbc,0xd5,0x7e,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, null ; encoding: [0x05,0x00,0xbc,0xd5,0x7c,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, -1 ; encoding: [0x05,0x00,0xbc,0xd5,0xc1,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xbc,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f64_e64 v5, 0.5 ; encoding: [0x05,0x00,0xbc,0xd5,0xf0,0x00,0x00,0x00] v_frexp_exp_i32_f64_e64 v5, -|src_scc| -// GFX12: encoding: [0x05,0x01,0xbc,0xd5,0xfd,0x00,0x00,0x20] +// GFX12: v_frexp_exp_i32_f64_e64 v5, -|src_scc| ; encoding: [0x05,0x01,0xbc,0xd5,0xfd,0x00,0x00,0x20] v_frexp_exp_i32_f64_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xbc,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_frexp_exp_i32_f64_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xbc,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_frexp_mant_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd9,0xd5,0x01,0x01,0x00,0x00] v_frexp_mant_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd9,0xd5,0xff,0x01,0x00,0x00] v_frexp_mant_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd9,0xd5,0x01,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd9,0xd5,0x69,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd9,0xd5,0x6a,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd9,0xd5,0x6b,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd9,0xd5,0x7b,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd9,0xd5,0x7d,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd9,0xd5,0x7e,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd9,0xd5,0x7f,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, null ; encoding: [0x05,0x00,0xd9,0xd5,0x7c,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd9,0xd5,0xc1,0x00,0x00,0x00] v_frexp_mant_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_frexp_mant_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd9,0xd5,0xf0,0x00,0x00,0x08] v_frexp_mant_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd9,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_frexp_mant_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd9,0xd5,0xfd,0x00,0x00,0x10] v_frexp_mant_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xd9,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd9,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_frexp_mant_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xc0,0xd5,0x01,0x01,0x00,0x00] v_frexp_mant_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xc0,0xd5,0xff,0x01,0x00,0x00] v_frexp_mant_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xc0,0xd5,0x01,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xc0,0xd5,0x69,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xc0,0xd5,0x6a,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xc0,0xd5,0x6b,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xc0,0xd5,0x7b,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xc0,0xd5,0x7d,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xc0,0xd5,0x7e,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xc0,0xd5,0x7f,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, null ; encoding: [0x05,0x00,0xc0,0xd5,0x7c,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xc0,0xd5,0xc1,0x00,0x00,0x00] v_frexp_mant_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_frexp_mant_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xc0,0xd5,0xf0,0x00,0x00,0x08] v_frexp_mant_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xc0,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_frexp_mant_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xc0,0xd5,0xfd,0x00,0x00,0x10] v_frexp_mant_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xc0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_frexp_mant_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xc0,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_frexp_mant_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xbd,0xd5,0x01,0x01,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xbd,0xd5,0xfe,0x01,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xbd,0xd5,0x02,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xbd,0xd5,0x68,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xbd,0xd5,0x6a,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xbd,0xd5,0x7a,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xbd,0xd5,0x7e,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xbd,0xd5,0x7c,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xbd,0xd5,0xc1,0x00,0x00,0x00] v_frexp_mant_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xbd,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_frexp_mant_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xbd,0xd5,0xf0,0x00,0x00,0x08] v_frexp_mant_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0xbd,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_frexp_mant_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xbd,0xd5,0xfd,0x00,0x00,0x30] v_frexp_mant_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0xbd,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_frexp_mant_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xbd,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_log_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_log_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd7,0xd5,0x01,0x01,0x00,0x00] v_log_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_log_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd7,0xd5,0xff,0x01,0x00,0x00] v_log_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd7,0xd5,0x01,0x00,0x00,0x00] v_log_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd7,0xd5,0x69,0x00,0x00,0x00] v_log_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd7,0xd5,0x6a,0x00,0x00,0x00] v_log_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd7,0xd5,0x6b,0x00,0x00,0x00] v_log_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd7,0xd5,0x7b,0x00,0x00,0x00] v_log_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd7,0xd5,0x7d,0x00,0x00,0x00] v_log_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd7,0xd5,0x7e,0x00,0x00,0x00] v_log_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd7,0xd5,0x7f,0x00,0x00,0x00] v_log_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, null ; encoding: [0x05,0x00,0xd7,0xd5,0x7c,0x00,0x00,0x00] v_log_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_log_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd7,0xd5,0xc1,0x00,0x00,0x00] v_log_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_log_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd7,0xd5,0xf0,0x00,0x00,0x08] v_log_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd7,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_log_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd7,0xd5,0xfd,0x00,0x00,0x10] v_log_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xd7,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_log_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd7,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_log_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_log_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa7,0xd5,0x01,0x01,0x00,0x00] v_log_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_log_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa7,0xd5,0xff,0x01,0x00,0x00] v_log_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa7,0xd5,0x01,0x00,0x00,0x00] v_log_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa7,0xd5,0x69,0x00,0x00,0x00] v_log_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa7,0xd5,0x6a,0x00,0x00,0x00] v_log_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa7,0xd5,0x6b,0x00,0x00,0x00] v_log_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa7,0xd5,0x7b,0x00,0x00,0x00] v_log_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa7,0xd5,0x7d,0x00,0x00,0x00] v_log_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa7,0xd5,0x7e,0x00,0x00,0x00] v_log_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa7,0xd5,0x7f,0x00,0x00,0x00] v_log_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, null ; encoding: [0x05,0x00,0xa7,0xd5,0x7c,0x00,0x00,0x00] v_log_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_log_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa7,0xd5,0xc1,0x00,0x00,0x00] v_log_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_log_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa7,0xd5,0xf0,0x00,0x00,0x08] v_log_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa7,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_log_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa7,0xd5,0xfd,0x00,0x00,0x10] v_log_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa7,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_log_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa7,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_mov_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, v1 ; encoding: [0x05,0x00,0x81,0xd5,0x01,0x01,0x00,0x00] v_mov_b32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, v255 ; encoding: [0x05,0x00,0x81,0xd5,0xff,0x01,0x00,0x00] v_mov_b32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, s1 ; encoding: [0x05,0x00,0x81,0xd5,0x01,0x00,0x00,0x00] v_mov_b32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, s105 ; encoding: [0x05,0x00,0x81,0xd5,0x69,0x00,0x00,0x00] v_mov_b32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0x81,0xd5,0x6a,0x00,0x00,0x00] v_mov_b32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0x81,0xd5,0x6b,0x00,0x00,0x00] v_mov_b32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0x81,0xd5,0x7b,0x00,0x00,0x00] v_mov_b32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, m0 ; encoding: [0x05,0x00,0x81,0xd5,0x7d,0x00,0x00,0x00] v_mov_b32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0x81,0xd5,0x7e,0x00,0x00,0x00] v_mov_b32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0x81,0xd5,0x7f,0x00,0x00,0x00] v_mov_b32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, null ; encoding: [0x05,0x00,0x81,0xd5,0x7c,0x00,0x00,0x00] v_mov_b32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, -1 ; encoding: [0x05,0x00,0x81,0xd5,0xc1,0x00,0x00,0x00] v_mov_b32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0x81,0xd5,0xf0,0x00,0x00,0x00] v_mov_b32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0x81,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0x81,0xd5,0xfd,0x00,0x00,0x00] v_mov_b32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0x81,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_mov_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0x81,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_movreld_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc2,0xd5,0x01,0x01,0x00,0x00] v_movreld_b32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xc2,0xd5,0xff,0x01,0x00,0x00] v_movreld_b32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xc2,0xd5,0x01,0x00,0x00,0x00] v_movreld_b32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xc2,0xd5,0x69,0x00,0x00,0x00] v_movreld_b32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xc2,0xd5,0x6a,0x00,0x00,0x00] v_movreld_b32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xc2,0xd5,0x6b,0x00,0x00,0x00] v_movreld_b32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xc2,0xd5,0x7b,0x00,0x00,0x00] v_movreld_b32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xc2,0xd5,0x7d,0x00,0x00,0x00] v_movreld_b32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xc2,0xd5,0x7e,0x00,0x00,0x00] v_movreld_b32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xc2,0xd5,0x7f,0x00,0x00,0x00] v_movreld_b32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, null ; encoding: [0x05,0x00,0xc2,0xd5,0x7c,0x00,0x00,0x00] v_movreld_b32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xc2,0xd5,0xc1,0x00,0x00,0x00] v_movreld_b32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xc2,0xd5,0xf0,0x00,0x00,0x00] v_movreld_b32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xc2,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_movreld_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xc2,0xd5,0xfd,0x00,0x00,0x00] v_movreld_b32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xc2,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_movreld_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xc2,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_movrels_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xc3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_movrels_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc3,0xd5,0x01,0x01,0x00,0x00] v_movrels_b32_e64 v255, v255 -// GFX12: encoding: [0xff,0x00,0xc3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_movrels_b32_e64 v255, v255 ; encoding: [0xff,0x00,0xc3,0xd5,0xff,0x01,0x00,0x00] v_movrelsd_2_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xc8,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_movrelsd_2_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc8,0xd5,0x01,0x01,0x00,0x00] v_movrelsd_2_b32_e64 v255, v255 -// GFX12: encoding: [0xff,0x00,0xc8,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_movrelsd_2_b32_e64 v255, v255 ; encoding: [0xff,0x00,0xc8,0xd5,0xff,0x01,0x00,0x00] v_movrelsd_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xc4,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_movrelsd_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xc4,0xd5,0x01,0x01,0x00,0x00] v_movrelsd_b32_e64 v255, v255 -// GFX12: encoding: [0xff,0x00,0xc4,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_movrelsd_b32_e64 v255, v255 ; encoding: [0xff,0x00,0xc4,0xd5,0xff,0x01,0x00,0x00] v_nop_e64 -// GFX12: encoding: [0x00,0x00,0x80,0xd5,0x00,0x00,0x00,0x00] +// GFX12: v_nop ; encoding: [0x00,0x00,0x80,0xd5,0x00,0x00,0x00,0x00] v_not_b16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_not_b16_e64 v5, v1 ; encoding: [0x05,0x00,0xe9,0xd5,0x01,0x01,0x00,0x00] v_not_b16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_not_b16_e64 v5, v255 ; encoding: [0x05,0x00,0xe9,0xd5,0xff,0x01,0x00,0x00] v_not_b16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, s1 ; encoding: [0x05,0x00,0xe9,0xd5,0x01,0x00,0x00,0x00] v_not_b16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, s105 ; encoding: [0x05,0x00,0xe9,0xd5,0x69,0x00,0x00,0x00] v_not_b16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe9,0xd5,0x6a,0x00,0x00,0x00] v_not_b16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe9,0xd5,0x6b,0x00,0x00,0x00] v_not_b16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe9,0xd5,0x7b,0x00,0x00,0x00] v_not_b16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, m0 ; encoding: [0x05,0x00,0xe9,0xd5,0x7d,0x00,0x00,0x00] v_not_b16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe9,0xd5,0x7e,0x00,0x00,0x00] v_not_b16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe9,0xd5,0x7f,0x00,0x00,0x00] v_not_b16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, null ; encoding: [0x05,0x00,0xe9,0xd5,0x7c,0x00,0x00,0x00] v_not_b16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, -1 ; encoding: [0x05,0x00,0xe9,0xd5,0xc1,0x00,0x00,0x00] v_not_b16_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xe9,0xd5,0xf0,0x00,0x00,0x00] v_not_b16_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xe9,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_not_b16_e64 v5, src_scc ; encoding: [0x05,0x00,0xe9,0xd5,0xfd,0x00,0x00,0x00] v_not_b16_e64 v255, 0xfe0b -// GFX12: encoding: [0xff,0x00,0xe9,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX12: v_not_b16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xe9,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_not_b32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_not_b32_e64 v5, v1 ; encoding: [0x05,0x00,0xb7,0xd5,0x01,0x01,0x00,0x00] v_not_b32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_not_b32_e64 v5, v255 ; encoding: [0x05,0x00,0xb7,0xd5,0xff,0x01,0x00,0x00] v_not_b32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, s1 ; encoding: [0x05,0x00,0xb7,0xd5,0x01,0x00,0x00,0x00] v_not_b32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, s105 ; encoding: [0x05,0x00,0xb7,0xd5,0x69,0x00,0x00,0x00] v_not_b32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb7,0xd5,0x6a,0x00,0x00,0x00] v_not_b32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb7,0xd5,0x6b,0x00,0x00,0x00] v_not_b32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb7,0xd5,0x7b,0x00,0x00,0x00] v_not_b32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, m0 ; encoding: [0x05,0x00,0xb7,0xd5,0x7d,0x00,0x00,0x00] v_not_b32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb7,0xd5,0x7e,0x00,0x00,0x00] v_not_b32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb7,0xd5,0x7f,0x00,0x00,0x00] v_not_b32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, null ; encoding: [0x05,0x00,0xb7,0xd5,0x7c,0x00,0x00,0x00] v_not_b32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, -1 ; encoding: [0x05,0x00,0xb7,0xd5,0xc1,0x00,0x00,0x00] v_not_b32_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, 0.5 ; encoding: [0x05,0x00,0xb7,0xd5,0xf0,0x00,0x00,0x00] v_not_b32_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xb7,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_not_b32_e64 v5, src_scc ; encoding: [0x05,0x00,0xb7,0xd5,0xfd,0x00,0x00,0x00] v_not_b32_e64 v255, 0xaf123456 -// GFX12: encoding: [0xff,0x00,0xb7,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] +// GFX12: v_not_b32_e64 v255, 0xaf123456 ; encoding: [0xff,0x00,0xb7,0xd5,0xff,0x00,0x00,0x00,0x56,0x34,0x12,0xaf] v_pipeflush_e64 -// GFX12: encoding: [0x00,0x00,0x9b,0xd5,0x00,0x00,0x00,0x00] +// GFX12: v_pipeflush ; encoding: [0x00,0x00,0x9b,0xd5,0x00,0x00,0x00,0x00] v_rcp_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd4,0xd5,0x01,0x01,0x00,0x00] v_rcp_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd4,0xd5,0xff,0x01,0x00,0x00] v_rcp_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd4,0xd5,0x01,0x00,0x00,0x00] v_rcp_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd4,0xd5,0x69,0x00,0x00,0x00] v_rcp_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd4,0xd5,0x6a,0x00,0x00,0x00] v_rcp_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd4,0xd5,0x6b,0x00,0x00,0x00] v_rcp_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd4,0xd5,0x7b,0x00,0x00,0x00] v_rcp_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd4,0xd5,0x7d,0x00,0x00,0x00] v_rcp_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd4,0xd5,0x7e,0x00,0x00,0x00] v_rcp_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd4,0xd5,0x7f,0x00,0x00,0x00] v_rcp_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, null ; encoding: [0x05,0x00,0xd4,0xd5,0x7c,0x00,0x00,0x00] v_rcp_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd4,0xd5,0xc1,0x00,0x00,0x00] v_rcp_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rcp_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd4,0xd5,0xf0,0x00,0x00,0x08] v_rcp_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd4,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rcp_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd4,0xd5,0xfd,0x00,0x00,0x10] v_rcp_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xd4,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_rcp_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd4,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_rcp_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xaa,0xd5,0x01,0x01,0x00,0x00] v_rcp_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xaa,0xd5,0xff,0x01,0x00,0x00] v_rcp_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xaa,0xd5,0x01,0x00,0x00,0x00] v_rcp_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xaa,0xd5,0x69,0x00,0x00,0x00] v_rcp_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xaa,0xd5,0x6a,0x00,0x00,0x00] v_rcp_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xaa,0xd5,0x6b,0x00,0x00,0x00] v_rcp_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xaa,0xd5,0x7b,0x00,0x00,0x00] v_rcp_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xaa,0xd5,0x7d,0x00,0x00,0x00] v_rcp_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xaa,0xd5,0x7e,0x00,0x00,0x00] v_rcp_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xaa,0xd5,0x7f,0x00,0x00,0x00] v_rcp_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, null ; encoding: [0x05,0x00,0xaa,0xd5,0x7c,0x00,0x00,0x00] v_rcp_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xaa,0xd5,0xc1,0x00,0x00,0x00] v_rcp_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rcp_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xaa,0xd5,0xf0,0x00,0x00,0x08] v_rcp_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xaa,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rcp_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xaa,0xd5,0xfd,0x00,0x00,0x10] v_rcp_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xaa,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_rcp_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xaa,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rcp_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xaf,0xd5,0x01,0x01,0x00,0x00] v_rcp_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xaf,0xd5,0xfe,0x01,0x00,0x00] v_rcp_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xaf,0xd5,0x02,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xaf,0xd5,0x68,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xaf,0xd5,0x6a,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xaf,0xd5,0x7a,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xaf,0xd5,0x7e,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xaf,0xd5,0x7c,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rcp_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xaf,0xd5,0xc1,0x00,0x00,0x00] v_rcp_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xaf,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rcp_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xaf,0xd5,0xf0,0x00,0x00,0x08] v_rcp_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0xaf,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_rcp_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xaf,0xd5,0xfd,0x00,0x00,0x30] v_rcp_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0xaf,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_rcp_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xaf,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_rcp_iflag_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xab,0xd5,0x01,0x01,0x00,0x00] v_rcp_iflag_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xab,0xd5,0xff,0x01,0x00,0x00] v_rcp_iflag_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xab,0xd5,0x01,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xab,0xd5,0x69,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xab,0xd5,0x6a,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xab,0xd5,0x6b,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xab,0xd5,0x7b,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xab,0xd5,0x7d,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xab,0xd5,0x7e,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xab,0xd5,0x7f,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, null ; encoding: [0x05,0x00,0xab,0xd5,0x7c,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xab,0xd5,0xc1,0x00,0x00,0x00] v_rcp_iflag_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rcp_iflag_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xab,0xd5,0xf0,0x00,0x00,0x08] v_rcp_iflag_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xab,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rcp_iflag_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xab,0xd5,0xfd,0x00,0x00,0x10] v_rcp_iflag_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xab,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_rcp_iflag_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xab,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rndne_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xde,0xd5,0x01,0x01,0x00,0x00] v_rndne_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xde,0xd5,0xff,0x01,0x00,0x00] v_rndne_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xde,0xd5,0x01,0x00,0x00,0x00] v_rndne_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xde,0xd5,0x69,0x00,0x00,0x00] v_rndne_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xde,0xd5,0x6a,0x00,0x00,0x00] v_rndne_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xde,0xd5,0x6b,0x00,0x00,0x00] v_rndne_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xde,0xd5,0x7b,0x00,0x00,0x00] v_rndne_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xde,0xd5,0x7d,0x00,0x00,0x00] v_rndne_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xde,0xd5,0x7e,0x00,0x00,0x00] v_rndne_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xde,0xd5,0x7f,0x00,0x00,0x00] v_rndne_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, null ; encoding: [0x05,0x00,0xde,0xd5,0x7c,0x00,0x00,0x00] v_rndne_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xde,0xd5,0xc1,0x00,0x00,0x00] v_rndne_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rndne_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xde,0xd5,0xf0,0x00,0x00,0x08] v_rndne_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xde,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rndne_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xde,0xd5,0xfd,0x00,0x00,0x10] v_rndne_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xde,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_rndne_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xde,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_rndne_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa3,0xd5,0x01,0x01,0x00,0x00] v_rndne_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa3,0xd5,0xff,0x01,0x00,0x00] v_rndne_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa3,0xd5,0x01,0x00,0x00,0x00] v_rndne_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa3,0xd5,0x69,0x00,0x00,0x00] v_rndne_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa3,0xd5,0x6a,0x00,0x00,0x00] v_rndne_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa3,0xd5,0x6b,0x00,0x00,0x00] v_rndne_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa3,0xd5,0x7b,0x00,0x00,0x00] v_rndne_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa3,0xd5,0x7d,0x00,0x00,0x00] v_rndne_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa3,0xd5,0x7e,0x00,0x00,0x00] v_rndne_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa3,0xd5,0x7f,0x00,0x00,0x00] v_rndne_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, null ; encoding: [0x05,0x00,0xa3,0xd5,0x7c,0x00,0x00,0x00] v_rndne_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa3,0xd5,0xc1,0x00,0x00,0x00] v_rndne_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rndne_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa3,0xd5,0xf0,0x00,0x00,0x08] v_rndne_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa3,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rndne_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa3,0xd5,0xfd,0x00,0x00,0x10] v_rndne_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_rndne_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rndne_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x99,0xd5,0x01,0x01,0x00,0x00] v_rndne_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x99,0xd5,0xfe,0x01,0x00,0x00] v_rndne_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x99,0xd5,0x02,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x99,0xd5,0x68,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x99,0xd5,0x6a,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x99,0xd5,0x7a,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x99,0xd5,0x7e,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x99,0xd5,0x7c,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rndne_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x99,0xd5,0xc1,0x00,0x00,0x00] v_rndne_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x99,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rndne_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x99,0xd5,0xf0,0x00,0x00,0x08] v_rndne_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0x99,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_rndne_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x99,0xd5,0xfd,0x00,0x00,0x30] v_rndne_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0x99,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_rndne_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x99,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_rsq_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd6,0xd5,0x01,0x01,0x00,0x00] v_rsq_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd6,0xd5,0xff,0x01,0x00,0x00] v_rsq_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd6,0xd5,0x01,0x00,0x00,0x00] v_rsq_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd6,0xd5,0x69,0x00,0x00,0x00] v_rsq_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd6,0xd5,0x6a,0x00,0x00,0x00] v_rsq_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd6,0xd5,0x6b,0x00,0x00,0x00] v_rsq_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd6,0xd5,0x7b,0x00,0x00,0x00] v_rsq_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd6,0xd5,0x7d,0x00,0x00,0x00] v_rsq_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd6,0xd5,0x7e,0x00,0x00,0x00] v_rsq_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd6,0xd5,0x7f,0x00,0x00,0x00] v_rsq_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, null ; encoding: [0x05,0x00,0xd6,0xd5,0x7c,0x00,0x00,0x00] v_rsq_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd6,0xd5,0xc1,0x00,0x00,0x00] v_rsq_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rsq_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd6,0xd5,0xf0,0x00,0x00,0x08] v_rsq_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd6,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rsq_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd6,0xd5,0xfd,0x00,0x00,0x10] v_rsq_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xd6,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_rsq_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd6,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_rsq_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xae,0xd5,0x01,0x01,0x00,0x00] v_rsq_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xae,0xd5,0xff,0x01,0x00,0x00] v_rsq_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xae,0xd5,0x01,0x00,0x00,0x00] v_rsq_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xae,0xd5,0x69,0x00,0x00,0x00] v_rsq_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xae,0xd5,0x6a,0x00,0x00,0x00] v_rsq_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xae,0xd5,0x6b,0x00,0x00,0x00] v_rsq_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xae,0xd5,0x7b,0x00,0x00,0x00] v_rsq_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xae,0xd5,0x7d,0x00,0x00,0x00] v_rsq_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xae,0xd5,0x7e,0x00,0x00,0x00] v_rsq_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xae,0xd5,0x7f,0x00,0x00,0x00] v_rsq_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, null ; encoding: [0x05,0x00,0xae,0xd5,0x7c,0x00,0x00,0x00] v_rsq_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xae,0xd5,0xc1,0x00,0x00,0x00] v_rsq_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rsq_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xae,0xd5,0xf0,0x00,0x00,0x08] v_rsq_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xae,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_rsq_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xae,0xd5,0xfd,0x00,0x00,0x10] v_rsq_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xae,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_rsq_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xae,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_rsq_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xb1,0xd5,0x01,0x01,0x00,0x00] v_rsq_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xb1,0xd5,0xfe,0x01,0x00,0x00] v_rsq_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xb1,0xd5,0x02,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xb1,0xd5,0x68,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xb1,0xd5,0x6a,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xb1,0xd5,0x7a,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xb1,0xd5,0x7e,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xb1,0xd5,0x7c,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_rsq_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xb1,0xd5,0xc1,0x00,0x00,0x00] v_rsq_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xb1,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_rsq_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xb1,0xd5,0xf0,0x00,0x00,0x08] v_rsq_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0xb1,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_rsq_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xb1,0xd5,0xfd,0x00,0x00,0x30] v_rsq_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0xb1,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_rsq_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xb1,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_sat_pk_u8_i16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, v1 ; encoding: [0x05,0x00,0xe2,0xd5,0x01,0x01,0x00,0x00] v_sat_pk_u8_i16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, v255 ; encoding: [0x05,0x00,0xe2,0xd5,0xff,0x01,0x00,0x00] v_sat_pk_u8_i16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, s1 ; encoding: [0x05,0x00,0xe2,0xd5,0x01,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, s105 ; encoding: [0x05,0x00,0xe2,0xd5,0x69,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe2,0xd5,0x6a,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe2,0xd5,0x6b,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe2,0xd5,0x7b,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, m0 ; encoding: [0x05,0x00,0xe2,0xd5,0x7d,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe2,0xd5,0x7e,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe2,0xd5,0x7f,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, null ; encoding: [0x05,0x00,0xe2,0xd5,0x7c,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, -1 ; encoding: [0x05,0x00,0xe2,0xd5,0xc1,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, 0.5 -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0xf0,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, 0.5 ; encoding: [0x05,0x00,0xe2,0xd5,0xf0,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v5, src_scc -// GFX12: encoding: [0x05,0x00,0xe2,0xd5,0xfd,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v5, src_scc ; encoding: [0x05,0x00,0xe2,0xd5,0xfd,0x00,0x00,0x00] v_sat_pk_u8_i16_e64 v255, 0xfe0b -// GFX12: encoding: [0xff,0x00,0xe2,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64 v255, 0xfe0b ; encoding: [0xff,0x00,0xe2,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00] v_sin_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xe0,0xd5,0x01,0x01,0x00,0x00] v_sin_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xe0,0xd5,0xff,0x01,0x00,0x00] v_sin_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xe0,0xd5,0x01,0x00,0x00,0x00] v_sin_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xe0,0xd5,0x69,0x00,0x00,0x00] v_sin_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xe0,0xd5,0x6a,0x00,0x00,0x00] v_sin_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xe0,0xd5,0x6b,0x00,0x00,0x00] v_sin_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xe0,0xd5,0x7b,0x00,0x00,0x00] v_sin_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xe0,0xd5,0x7d,0x00,0x00,0x00] v_sin_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xe0,0xd5,0x7e,0x00,0x00,0x00] v_sin_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xe0,0xd5,0x7f,0x00,0x00,0x00] v_sin_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, null ; encoding: [0x05,0x00,0xe0,0xd5,0x7c,0x00,0x00,0x00] v_sin_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xe0,0xd5,0xc1,0x00,0x00,0x00] v_sin_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_sin_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xe0,0xd5,0xf0,0x00,0x00,0x08] v_sin_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xe0,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_sin_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xe0,0xd5,0xfd,0x00,0x00,0x10] v_sin_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xe0,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_sin_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xe0,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_sin_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xb5,0xd5,0x01,0x01,0x00,0x00] v_sin_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xb5,0xd5,0xff,0x01,0x00,0x00] v_sin_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xb5,0xd5,0x01,0x00,0x00,0x00] v_sin_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xb5,0xd5,0x69,0x00,0x00,0x00] v_sin_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb5,0xd5,0x6a,0x00,0x00,0x00] v_sin_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb5,0xd5,0x6b,0x00,0x00,0x00] v_sin_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb5,0xd5,0x7b,0x00,0x00,0x00] v_sin_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xb5,0xd5,0x7d,0x00,0x00,0x00] v_sin_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb5,0xd5,0x7e,0x00,0x00,0x00] v_sin_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb5,0xd5,0x7f,0x00,0x00,0x00] v_sin_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, null ; encoding: [0x05,0x00,0xb5,0xd5,0x7c,0x00,0x00,0x00] v_sin_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xb5,0xd5,0xc1,0x00,0x00,0x00] v_sin_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_sin_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xb5,0xd5,0xf0,0x00,0x00,0x08] v_sin_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xb5,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_sin_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xb5,0xd5,0xfd,0x00,0x00,0x10] v_sin_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xb5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_sin_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xb5,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_sqrt_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xd5,0xd5,0x01,0x01,0x00,0x00] v_sqrt_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xd5,0xd5,0xff,0x01,0x00,0x00] v_sqrt_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xd5,0xd5,0x01,0x00,0x00,0x00] v_sqrt_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xd5,0xd5,0x69,0x00,0x00,0x00] v_sqrt_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xd5,0xd5,0x6a,0x00,0x00,0x00] v_sqrt_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xd5,0xd5,0x6b,0x00,0x00,0x00] v_sqrt_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xd5,0xd5,0x7b,0x00,0x00,0x00] v_sqrt_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xd5,0xd5,0x7d,0x00,0x00,0x00] v_sqrt_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xd5,0xd5,0x7e,0x00,0x00,0x00] v_sqrt_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xd5,0xd5,0x7f,0x00,0x00,0x00] v_sqrt_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, null ; encoding: [0x05,0x00,0xd5,0xd5,0x7c,0x00,0x00,0x00] v_sqrt_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xd5,0xd5,0xc1,0x00,0x00,0x00] v_sqrt_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_sqrt_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xd5,0xd5,0xf0,0x00,0x00,0x08] v_sqrt_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xd5,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_sqrt_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xd5,0xd5,0xfd,0x00,0x00,0x10] v_sqrt_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xd5,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_sqrt_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xd5,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_sqrt_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xb3,0xd5,0x01,0x01,0x00,0x00] v_sqrt_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xb3,0xd5,0xff,0x01,0x00,0x00] v_sqrt_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xb3,0xd5,0x01,0x00,0x00,0x00] v_sqrt_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xb3,0xd5,0x69,0x00,0x00,0x00] v_sqrt_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xb3,0xd5,0x6a,0x00,0x00,0x00] v_sqrt_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xb3,0xd5,0x6b,0x00,0x00,0x00] v_sqrt_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xb3,0xd5,0x7b,0x00,0x00,0x00] v_sqrt_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xb3,0xd5,0x7d,0x00,0x00,0x00] v_sqrt_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xb3,0xd5,0x7e,0x00,0x00,0x00] v_sqrt_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xb3,0xd5,0x7f,0x00,0x00,0x00] v_sqrt_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, null ; encoding: [0x05,0x00,0xb3,0xd5,0x7c,0x00,0x00,0x00] v_sqrt_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xb3,0xd5,0xc1,0x00,0x00,0x00] v_sqrt_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_sqrt_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xb3,0xd5,0xf0,0x00,0x00,0x08] v_sqrt_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xb3,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_sqrt_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xb3,0xd5,0xfd,0x00,0x00,0x10] v_sqrt_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xb3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_sqrt_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xb3,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_sqrt_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0xb4,0xd5,0x01,0x01,0x00,0x00] v_sqrt_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0xb4,0xd5,0xfe,0x01,0x00,0x00] v_sqrt_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0xb4,0xd5,0x02,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0xb4,0xd5,0x68,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0xb4,0xd5,0x6a,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0xb4,0xd5,0x7a,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0xb4,0xd5,0x7e,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0xb4,0xd5,0x7c,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_sqrt_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0xb4,0xd5,0xc1,0x00,0x00,0x00] v_sqrt_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xb4,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_sqrt_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0xb4,0xd5,0xf0,0x00,0x00,0x08] v_sqrt_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0xb4,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_sqrt_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0xb4,0xd5,0xfd,0x00,0x00,0x30] v_sqrt_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0xb4,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_sqrt_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0xb4,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] v_trunc_f16_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, v1 ; encoding: [0x05,0x00,0xdd,0xd5,0x01,0x01,0x00,0x00] v_trunc_f16_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, v255 ; encoding: [0x05,0x00,0xdd,0xd5,0xff,0x01,0x00,0x00] v_trunc_f16_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, s1 ; encoding: [0x05,0x00,0xdd,0xd5,0x01,0x00,0x00,0x00] v_trunc_f16_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, s105 ; encoding: [0x05,0x00,0xdd,0xd5,0x69,0x00,0x00,0x00] v_trunc_f16_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xdd,0xd5,0x6a,0x00,0x00,0x00] v_trunc_f16_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xdd,0xd5,0x6b,0x00,0x00,0x00] v_trunc_f16_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xdd,0xd5,0x7b,0x00,0x00,0x00] v_trunc_f16_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, m0 ; encoding: [0x05,0x00,0xdd,0xd5,0x7d,0x00,0x00,0x00] v_trunc_f16_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, exec_lo ; encoding: [0x05,0x00,0xdd,0xd5,0x7e,0x00,0x00,0x00] v_trunc_f16_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, exec_hi ; encoding: [0x05,0x00,0xdd,0xd5,0x7f,0x00,0x00,0x00] v_trunc_f16_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, null ; encoding: [0x05,0x00,0xdd,0xd5,0x7c,0x00,0x00,0x00] v_trunc_f16_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64 v5, -1 ; encoding: [0x05,0x00,0xdd,0xd5,0xc1,0x00,0x00,0x00] v_trunc_f16_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_trunc_f16_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xdd,0xd5,0xf0,0x00,0x00,0x08] v_trunc_f16_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xdd,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_trunc_f16_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xdd,0xd5,0xfd,0x00,0x00,0x10] v_trunc_f16_e64 v255, -|0xfe0b| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xdd,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] +// GFX12: v_trunc_f16_e64 v255, -|0xfe0b| clamp div:2 ; encoding: [0xff,0x81,0xdd,0xd5,0xff,0x00,0x00,0x38,0x0b,0xfe,0x00,0x00] v_trunc_f32_e64 v5, v1 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, v1 ; encoding: [0x05,0x00,0xa1,0xd5,0x01,0x01,0x00,0x00] v_trunc_f32_e64 v5, v255 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0xff,0x01,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, v255 ; encoding: [0x05,0x00,0xa1,0xd5,0xff,0x01,0x00,0x00] v_trunc_f32_e64 v5, s1 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x01,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, s1 ; encoding: [0x05,0x00,0xa1,0xd5,0x01,0x00,0x00,0x00] v_trunc_f32_e64 v5, s105 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x69,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, s105 ; encoding: [0x05,0x00,0xa1,0xd5,0x69,0x00,0x00,0x00] v_trunc_f32_e64 v5, vcc_lo -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, vcc_lo ; encoding: [0x05,0x00,0xa1,0xd5,0x6a,0x00,0x00,0x00] v_trunc_f32_e64 v5, vcc_hi -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x6b,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, vcc_hi ; encoding: [0x05,0x00,0xa1,0xd5,0x6b,0x00,0x00,0x00] v_trunc_f32_e64 v5, ttmp15 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x7b,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, ttmp15 ; encoding: [0x05,0x00,0xa1,0xd5,0x7b,0x00,0x00,0x00] v_trunc_f32_e64 v5, m0 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x7d,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, m0 ; encoding: [0x05,0x00,0xa1,0xd5,0x7d,0x00,0x00,0x00] v_trunc_f32_e64 v5, exec_lo -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, exec_lo ; encoding: [0x05,0x00,0xa1,0xd5,0x7e,0x00,0x00,0x00] v_trunc_f32_e64 v5, exec_hi -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x7f,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, exec_hi ; encoding: [0x05,0x00,0xa1,0xd5,0x7f,0x00,0x00,0x00] v_trunc_f32_e64 v5, null -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, null ; encoding: [0x05,0x00,0xa1,0xd5,0x7c,0x00,0x00,0x00] v_trunc_f32_e64 v5, -1 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64 v5, -1 ; encoding: [0x05,0x00,0xa1,0xd5,0xc1,0x00,0x00,0x00] v_trunc_f32_e64 v5, 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_trunc_f32_e64 v5, 0.5 mul:2 ; encoding: [0x05,0x00,0xa1,0xd5,0xf0,0x00,0x00,0x08] v_trunc_f32_e64 v5, src_scc mul:4 -// GFX12: encoding: [0x05,0x00,0xa1,0xd5,0xfd,0x00,0x00,0x10] +// GFX12: v_trunc_f32_e64 v5, src_scc mul:4 ; encoding: [0x05,0x00,0xa1,0xd5,0xfd,0x00,0x00,0x10] v_trunc_f32_e64 v255, -|0xaf123456| clamp div:2 -// GFX12: encoding: [0xff,0x81,0xa1,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] +// GFX12: v_trunc_f32_e64 v255, -|0xaf123456| clamp div:2 ; encoding: [0xff,0x81,0xa1,0xd5,0xff,0x00,0x00,0x38,0x56,0x34,0x12,0xaf] v_trunc_f64_e64 v[5:6], v[1:2] -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x01,0x01,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], v[1:2] ; encoding: [0x05,0x00,0x97,0xd5,0x01,0x01,0x00,0x00] v_trunc_f64_e64 v[5:6], v[254:255] -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0xfe,0x01,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], v[254:255] ; encoding: [0x05,0x00,0x97,0xd5,0xfe,0x01,0x00,0x00] v_trunc_f64_e64 v[5:6], s[2:3] -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x02,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], s[2:3] ; encoding: [0x05,0x00,0x97,0xd5,0x02,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], s[104:105] -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x68,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], s[104:105] ; encoding: [0x05,0x00,0x97,0xd5,0x68,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], vcc -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x6a,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], vcc ; encoding: [0x05,0x00,0x97,0xd5,0x6a,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], ttmp[14:15] -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x7a,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], ttmp[14:15] ; encoding: [0x05,0x00,0x97,0xd5,0x7a,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], exec -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x7e,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], exec ; encoding: [0x05,0x00,0x97,0xd5,0x7e,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], null -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0x7c,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], null ; encoding: [0x05,0x00,0x97,0xd5,0x7c,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], -1 -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0xc1,0x00,0x00,0x00] +// GFX12: v_trunc_f64_e64 v[5:6], -1 ; encoding: [0x05,0x00,0x97,0xd5,0xc1,0x00,0x00,0x00] v_trunc_f64_e64 v[5:6], 0.5 mul:2 -// GFX12: encoding: [0x05,0x00,0x97,0xd5,0xf0,0x00,0x00,0x08] +// GFX12: v_trunc_f64_e64 v[5:6], 0.5 mul:2 ; encoding: [0x05,0x00,0x97,0xd5,0xf0,0x00,0x00,0x08] v_trunc_f64_e64 v[5:6], -|src_scc| mul:4 -// GFX12: encoding: [0x05,0x01,0x97,0xd5,0xfd,0x00,0x00,0x30] +// GFX12: v_trunc_f64_e64 v[5:6], -|src_scc| mul:4 ; encoding: [0x05,0x01,0x97,0xd5,0xfd,0x00,0x00,0x30] v_trunc_f64_e64 v[254:255], 0xaf123456 clamp div:2 -// GFX12: encoding: [0xfe,0x80,0x97,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] +// GFX12: v_trunc_f64_e64 v[254:255], 0xaf123456 clamp div:2 ; encoding: [0xfe,0x80,0x97,0xd5,0xff,0x00,0x00,0x18,0x56,0x34,0x12,0xaf] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp16.s b/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp16.s index bc692b2ad0c9..05d821f9c592 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp16.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp16.s @@ -1,544 +1,545 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | FileCheck --check-prefix=GFX12 %s v_bfrev_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_bfrev_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_bfrev_b32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_bfrev_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_bfrev_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_bfrev_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_bfrev_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb8,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_ceil_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ceil_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ceil_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_ceil_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ceil_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_ceil_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_ceil_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_ceil_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdc,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_ceil_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xdc,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_ceil_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdc,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ceil_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ceil_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ceil_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_ceil_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ceil_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_ceil_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_ceil_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_ceil_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa2,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa2,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa2,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cls_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cls_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cls_i32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cls_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cls_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cls_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_cls_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_clz_i32_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_clz_i32_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_clz_i32_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_clz_i32_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_cos_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cos_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cos_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cos_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cos_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cos_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cos_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cos_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cos_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cos_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xe1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_cos_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xe1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cos_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cos_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cos_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cos_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cos_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cos_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cos_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cos_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cos_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cos_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xb6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_cos_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xb6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ctz_i32_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ctz_i32_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ctz_i32_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_ctz_i32_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] V_CVT_F32_FP8_e64_dpp v5, v1 quad_perm:[3,1,2,0] row_mask:0x2 bank_mask:0xd -// GFX12: encoding: [0x05,0x00,0xec,0xd5,0xfa,0x00,0x00,0x00,0x01,0x27,0x00,0x2d] +// GFX12: v_cvt_f32_fp8_e64_dpp v5, v1 quad_perm:[3,1,2,0] row_mask:0x2 bank_mask:0xd ; encoding: [0x05,0x00,0xec,0xd5,0xfa,0x00,0x00,0x00,0x01,0x27,0x00,0x2d] V_CVT_F32_FP8_e64_dpp v1, v3 quad_perm:[2,1,0,3] row_mask:0x5 bank_mask:0xe -// GFX12: encoding: [0x01,0x00,0xec,0xd5,0xfa,0x00,0x00,0x00,0x03,0xc6,0x00,0x5e] +// GFX12: v_cvt_f32_fp8_e64_dpp v1, v3 quad_perm:[2,1,0,3] row_mask:0x5 bank_mask:0xe ; encoding: [0x01,0x00,0xec,0xd5,0xfa,0x00,0x00,0x00,0x03,0xc6,0x00,0x5e] V_CVT_F32_BF8_e64_dpp v5, v1 quad_perm:[0,3,2,1] row_mask:0x2 bank_mask:0xd -// GFX12: encoding: [0x05,0x00,0xed,0xd5,0xfa,0x00,0x00,0x00,0x01,0x6c,0x00,0x2d] +// GFX12: v_cvt_f32_bf8_e64_dpp v5, v1 quad_perm:[0,3,2,1] row_mask:0x2 bank_mask:0xd ; encoding: [0x05,0x00,0xed,0xd5,0xfa,0x00,0x00,0x00,0x01,0x6c,0x00,0x2d] V_CVT_F32_BF8_e64_dpp v1, v3 quad_perm:[0,1,3,2] row_mask:0x5 bank_mask:0xe -// GFX12: encoding: [0x01,0x00,0xed,0xd5,0xfa,0x00,0x00,0x00,0x03,0xb4,0x00,0x5e] +// GFX12: v_cvt_f32_bf8_e64_dpp v1, v3 quad_perm:[0,1,3,2] row_mask:0x5 bank_mask:0xe ; encoding: [0x01,0x00,0xed,0xd5,0xfa,0x00,0x00,0x00,0x03,0xb4,0x00,0x5e] v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_mirror -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_half_mirror -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:1 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:15 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:1 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:15 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:1 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:15 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8a,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f16_f32_e64_dpp v255.h, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0xc1,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_f32_e64_dpp v255.h, -|v255| op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0x8a,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f16_i16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_i16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_i16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_i16_e64_dpp v255.h, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0xc0,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_i16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc0,0xd1,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f16_u16_e64_dpp v5.h, v1.h mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f16_u16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f16_u16_e64_dpp v5.l, v1.h mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f16_u16_e64_dpp v255.h, v255.l clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0xc0,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f16_u16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc0,0xd0,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_mirror -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_half_mirror -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:1 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:15 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:1 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:15 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:1 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:15 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8b,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f32_f16_e64_dpp v255, -|v255.h| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x89,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_f16_e64_dpp v255, -|v255.h| op_sel:[1,0] clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x89,0x8b,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_cvt_f32_fp8 v1, v2 quad_perm:[0,1,2,3] // GFX12: v_cvt_f32_fp8_dpp v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0xfa,0xd8,0x02,0x7e,0x02,0xe4,0x00,0xff] @@ -571,2230 +572,2230 @@ v_cvt_f32_bf8 v1, v2 byte_sel:3 quad_perm:[0,1,2,3] // GFX12: v_cvt_f32_bf8_e64_dpp v1, v2 byte_sel:3 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x01,0x18,0xed,0xd5,0xfa,0x00,0x00,0x00,0x02,0xe4,0x00,0xff] v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_i32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_i32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x85,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x85,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x85,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_u32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_u32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x86,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x86,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x86,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x91,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x91,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x91,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x92,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x92,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x92,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x93,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x93,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x93,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x94,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x94,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x94,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_floor_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_floor_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_flr_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_flr_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_flr_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8d,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0xc1,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x88,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0x88,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_i32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x88,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_i32_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_i32_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_i32_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_i32_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xea,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xe3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x41,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x41,0xe3,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xe4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x41,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x41,0xe4,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8e,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x80,0x8e,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x80,0x8e,0xd5,0xfa,0x00,0x00,0x18,0xff,0x6f,0x05,0x30] v_cvt_rpi_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_rpi_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_rpi_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0x8c,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xd2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0xc1,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0xc1,0xd2,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_u32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x87,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0x87,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_u32_f32_e64_dpp v255, -|v255| clamp row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0x87,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_cvt_u32_u16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_cvt_u32_u16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_cvt_u32_u16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_cvt_u32_u16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xeb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_exp_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_exp_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_exp_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_exp_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_exp_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_exp_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_exp_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_exp_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_exp_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd8,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_exp_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd8,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_exp_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd8,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_exp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_exp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_exp_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_exp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_exp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_exp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_exp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_exp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_exp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_exp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_exp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_ffbh_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ffbh_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ffbh_i32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ffbh_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ffbh_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_cls_i32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ffbh_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_cls_i32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xbb,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_ffbh_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ffbh_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ffbh_u32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ffbh_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ffbh_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ffbh_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_clz_i32_u32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_ffbl_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_ffbl_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_ffbl_b32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_ffbl_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_ffbl_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_ffbl_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_ctz_i32_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xba,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_floor_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_floor_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_floor_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_floor_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_floor_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_floor_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_floor_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_floor_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_floor_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdb,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_floor_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xdb,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_floor_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdb,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_floor_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_floor_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_floor_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_floor_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_floor_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_floor_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_floor_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_floor_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_floor_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_floor_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_floor_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_fract_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_fract_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_fract_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_fract_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_fract_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_fract_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_fract_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_fract_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_fract_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdf,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_fract_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xdf,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_fract_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdf,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_fract_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_fract_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_fract_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_fract_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_fract_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_fract_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_fract_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_fract_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_fract_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_fract_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_fract_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_mirror -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_half_mirror -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:1 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:15 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:1 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:15 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:1 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:15 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x48,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x48,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x08,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x08,0xda,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x41,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x41,0xda,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_frexp_exp_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xbf,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_frexp_exp_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x01,0xbf,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v255, -|v255| row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x01,0xbf,0xd5,0xfa,0x00,0x00,0x20,0xff,0x6f,0x05,0x30] v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_mant_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_frexp_mant_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd9,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd9,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd9,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_frexp_mant_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_frexp_mant_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xc0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xc0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_log_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_log_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_log_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_log_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_log_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_log_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_log_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_log_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_log_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_log_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_log_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_log_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_log_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_log_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_log_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_log_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_log_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_log_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_log_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_log_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa7,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_log_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_log_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa7,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_mov_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_mov_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_mov_b32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_mov_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_mov_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_mov_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_mov_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_mov_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0x81,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_movrels_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_movrels_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_movrels_b32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_movrels_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_movrels_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_movrels_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_movrels_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_movrels_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xc3,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_not_b16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_not_b16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_not_b16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_not_b16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_not_b16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_not_b16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_not_b16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_not_b16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_not_b16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_not_b16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xe9,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_not_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_not_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_not_b32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_not_b32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_not_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_not_b32_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_not_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_not_b32_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_not_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_not_b32_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xb7,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_rcp_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rcp_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rcp_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rcp_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rcp_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rcp_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rcp_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd4,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rcp_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd4,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rcp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rcp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rcp_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rcp_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rcp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rcp_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rcp_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xaa,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xaa,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xaa,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xab,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xab,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xab,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rndne_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rndne_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rndne_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rndne_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rndne_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rndne_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rndne_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rndne_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xde,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xde,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xde,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rndne_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rndne_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rndne_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rndne_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rndne_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rndne_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rndne_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rndne_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rsq_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rsq_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rsq_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rsq_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rsq_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rsq_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rsq_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rsq_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd6,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rsq_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rsq_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd6,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_rsq_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_rsq_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_rsq_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_rsq_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_rsq_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_rsq_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_rsq_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_rsq_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xae,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xae,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xae,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x5f,0x01,0x01] v_sat_pk_u8_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0x01,0x60,0x09,0x13] v_sat_pk_u8_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] +// GFX12: v_sat_pk_u8_i16_e64_dpp v255, v255 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x00,0xe2,0xd5,0xfa,0x00,0x00,0x00,0xff,0x6f,0x05,0x30] v_sin_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sin_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sin_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sin_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_sin_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sin_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_sin_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sin_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_sin_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xe0,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sin_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xe0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_sin_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xe0,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sin_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sin_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sin_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sin_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_sin_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sin_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_sin_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sin_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_sin_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sin_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xb5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_sin_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xb5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sqrt_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sqrt_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sqrt_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sqrt_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sqrt_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xd5,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sqrt_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xd5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_sqrt_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xd5,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_sqrt_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_sqrt_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_sqrt_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_sqrt_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_sqrt_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xb3,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xb3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xb3,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_trunc_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_trunc_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_trunc_f16_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_trunc_f16_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_trunc_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_trunc_f16_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_trunc_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_trunc_f16_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xdd,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xdd,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xdd,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] v_trunc_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 quad_perm:[3,2,1,0] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1b,0x00,0xff] v_trunc_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0xe4,0x00,0xff] v_trunc_f32_e64_dpp v5, v1 row_mirror -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x40,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_half_mirror -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_half_mirror row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x41,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shl:1 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_shl:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x01,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shl:15 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_shl:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x0f,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shr:1 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_shr:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x11,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_shr:15 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_shr:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x1f,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_ror:1 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_ror:1 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x21,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_ror:15 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_ror:15 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x2f,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] +// GFX12: v_trunc_f32_e64_dpp v5, v1 row_share:0 row_mask:0xf bank_mask:0xf ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x00,0x01,0x50,0x01,0xff] v_trunc_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] +// GFX12: v_trunc_f32_e64_dpp v5, v1 mul:2 row_share:15 row_mask:0x0 bank_mask:0x1 ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x08,0x01,0x5f,0x01,0x01] v_trunc_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 fi:0 -// GFX12: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] +// GFX12: v_trunc_f32_e64_dpp v5, v1 mul:4 row_xmask:0 row_mask:0x1 bank_mask:0x3 bound_ctrl:1 ; encoding: [0x05,0x00,0xa1,0xd5,0xfa,0x00,0x00,0x10,0x01,0x60,0x09,0x13] v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 bound_ctrl:0 fi:1 -// GFX12: [0xff,0x81,0xa1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] +// GFX12: v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 row_xmask:15 row_mask:0x3 bank_mask:0x0 fi:1 ; encoding: [0xff,0x81,0xa1,0xd5,0xfa,0x00,0x00,0x38,0xff,0x6f,0x05,0x30] diff --git a/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp8.s b/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp8.s index 974d7f32a62b..014c18a7b18e 100644 --- a/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp8.s +++ b/llvm/test/MC/AMDGPU/gfx12_asm_vop3_from_vop1_dpp8.s @@ -1,172 +1,173 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize32,+real-true16 -show-encoding %s | FileCheck --check-prefix=GFX12 %s v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb8,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_bfrev_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb8,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_bfrev_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_bfrev_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb8,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_ceil_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdc,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xdc,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdc,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_ceil_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xdc,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_ceil_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdc,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ceil_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ceil_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa2,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_ceil_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa2,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_ceil_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa2,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa2,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_ceil_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa2,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cls_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_clz_i32_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_cos_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cos_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cos_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xe1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cos_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xe1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_cos_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xe1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cos_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cos_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cos_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cos_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cos_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xb6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_cos_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xb6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ctz_i32_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_cvt_f32_fp8_e64_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7] -// GFX12: encoding: [0x05,0x00,0xec,0xd5,0xe9,0x00,0x00,0x00,0x01,0x88,0xc6,0xfa] +// GFX12: v_cvt_f32_fp8_e64_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7] ; encoding: [0x05,0x00,0xec,0xd5,0xe9,0x00,0x00,0x00,0x01,0x88,0xc6,0xfa] v_cvt_f32_fp8_e64_dpp v1, v3 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0x01,0x00,0xec,0xd5,0xe9,0x00,0x00,0x00,0x03,0x77,0x39,0x05] +// GFX12: v_cvt_f32_fp8_e64_dpp v1, v3 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x01,0x00,0xec,0xd5,0xe9,0x00,0x00,0x00,0x03,0x77,0x39,0x05] v_cvt_f32_bf8_e64_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7] -// GFX12: encoding: [0x05,0x00,0xed,0xd5,0xe9,0x00,0x00,0x00,0x01,0x88,0xc6,0xfa] +// GFX12: v_cvt_f32_bf8_e64_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7] ; encoding: [0x05,0x00,0xed,0xd5,0xe9,0x00,0x00,0x00,0x01,0x88,0xc6,0xfa] v_cvt_f32_bf8_e64_dpp v1, v3 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: encoding: [0x01,0x00,0xed,0xd5,0xe9,0x00,0x00,0x00,0x03,0x77,0x39,0x05] +// GFX12: v_cvt_f32_bf8_e64_dpp v1, v3 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x01,0x00,0xed,0xd5,0xe9,0x00,0x00,0x00,0x03,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8a,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8a,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_f32_e64_dpp v5.l, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8a,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64_dpp v255.l, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f16_f32_e64_dpp v255.h, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0xc1,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_f32_e64_dpp v255.h, -|v255| op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0x8a,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f16_i16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f16_i16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_i16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_i16_e64_dpp v255.h, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0xc0,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_i16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc0,0xd1,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f16_u16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64_dpp v255.l, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f16_u16_e64_dpp v5.h, v1.h mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_e64_dpp v5.h, v1.h op_sel:[1,1] mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v5.l, v1.h mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f16_u16_e64_dpp v5.l, v1.h op_sel:[1,0] mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f16_u16_e64_dpp v255.h, v255.l clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0xc0,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f16_u16_e64_dpp v255.h, v255.l op_sel:[0,1] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc0,0xd0,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_f16_e64_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8b,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8b,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_f16_e64_dpp v5, v1.l mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8b,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64_dpp v255, -|v255.l| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f32_f16_e64_dpp v255, -|v255.h| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x89,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_f16_e64_dpp v255, -|v255.h| op_sel:[1,0] clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x89,0x8b,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_cvt_f32_fp8 v1, v2 dpp8:[7,6,5,4,3,2,1,0] // GFX12: v_cvt_f32_fp8_dpp v1, v2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0xe9,0xd8,0x02,0x7e,0x02,0x77,0x39,0x05] @@ -199,604 +200,604 @@ v_cvt_f32_bf8 v1, v2 byte_sel:3 dpp8:[7,6,5,4,3,2,1,0] // GFX12: v_cvt_f32_bf8_e64_dpp v1, v2 byte_sel:3 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x01,0x18,0xed,0xd5,0xe9,0x00,0x00,0x00,0x02,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x85,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x85,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_i32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x85,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x85,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_i32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x85,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_u32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x86,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_u32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x86,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_u32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x86,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x86,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_u32_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x86,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte0_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x91,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x91,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x91,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x91,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte0_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x91,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte1_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x92,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x92,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x92,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x92,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte1_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x92,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte2_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x93,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x93,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x93,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x93,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte2_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x93,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_f32_ubyte3_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x94,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x94,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x94,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x94,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_f32_ubyte3_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x94,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_floor_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_flr_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8d,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8d,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_flr_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_floor_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8d,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0xc1,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x88,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x88,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x88,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x88,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0x88,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_i32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x88,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xea,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_i32_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xea,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_i32_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_i32_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xea,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xe3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xe3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x41,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_norm_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x41,0xe3,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xe4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xe4,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x41,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_norm_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x41,0xe4,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_off_f32_i4_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8e,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8e,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_off_f32_i4_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8e,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x80,0x8e,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_off_f32_i4_e64_dpp v255, v255 clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x80,0x8e,0xd5,0xe9,0x00,0x00,0x18,0xff,0x00,0x00,0x00] v_cvt_rpi_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x8c,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x8c,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_rpi_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_nearest_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0x8c,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64_dpp v255.l, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xd2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xd2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0xc1,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_u16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0xc1,0xd2,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x87,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x87,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x87,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x87,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0x87,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_u32_f32_e64_dpp v255, -|v255| clamp dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0x87,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xeb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cvt_u32_u16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xeb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_cvt_u32_u16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_cvt_u32_u16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xeb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_exp_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd8,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd8,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd8,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_exp_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd8,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_exp_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd8,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_exp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_exp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_exp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_exp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_exp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_exp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_ffbh_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_cls_i32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xbb,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_cls_i32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xbb,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_ffbh_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_clz_i32_u32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbh_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_clz_i32_u32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_ffbl_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbl_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_ctz_i32_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xba,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_ffbl_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_ctz_i32_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xba,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_floor_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdb,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xdb,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdb,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_floor_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xdb,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_floor_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdb,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_floor_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_floor_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_floor_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_floor_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_floor_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_floor_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_fract_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_fract_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdf,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_fract_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xdf,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdf,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_fract_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xdf,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_fract_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdf,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_fract_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_fract_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_fract_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_fract_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_fract_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_fract_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.l dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v255.l, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x48,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.h, v1.h op_sel:[1,1] dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x48,0xda,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x08,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v5.l, v1.h op_sel:[1,0] dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x08,0xda,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x41,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i16_f16_e64_dpp v255.h, -|v255.l| op_sel:[0,1] dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x41,0xda,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xbf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xbf,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xbf,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xbf,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_exp_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x01,0xbf,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_exp_i32_f32_e64_dpp v255, -|v255| dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x01,0xbf,0xd5,0xe9,0x00,0x00,0x20,0xff,0x00,0x00,0x00] v_frexp_mant_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_mant_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd9,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_frexp_mant_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd9,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd9,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd9,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd9,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_frexp_mant_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_frexp_mant_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_frexp_mant_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xc0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_frexp_mant_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xc0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_frexp_mant_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xc0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_log_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_log_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_log_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_log_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_log_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_log_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_log_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_log_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_log_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_log_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa7,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_log_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_log_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa7,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_log_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_log_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa7,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0x81,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_mov_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0x81,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_mov_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_mov_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0x81,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xc3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_movrels_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xc3,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_movrels_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_movrels_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xc3,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xe9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_not_b16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe9,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_not_b16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xe9,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb7,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_not_b32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb7,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_not_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_not_b32_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xb7,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_rcp_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd4,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd4,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rcp_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd4,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rcp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rcp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xaa,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xaa,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xaa,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xaa,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rcp_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xaa,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rcp_iflag_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xab,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xab,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rcp_iflag_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xab,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xab,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rcp_iflag_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xab,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rndne_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rndne_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xde,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rndne_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xde,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xde,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xde,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rndne_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xde,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rndne_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rndne_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rndne_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rndne_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rndne_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rsq_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd6,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd6,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rsq_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rsq_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd6,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_rsq_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_rsq_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xae,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_rsq_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xae,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_rsq_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xae,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xae,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_rsq_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xae,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xe2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_sat_pk_u8_i16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe2,0xd5,0xea,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sat_pk_u8_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] +// GFX12: v_sat_pk_u8_i16_e64_dpp v255, v255 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x00,0xe2,0xd5,0xe9,0x00,0x00,0x00,0xff,0x00,0x00,0x00] v_sin_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sin_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xe0,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sin_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xe0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xe0,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sin_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xe0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_sin_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xe0,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sin_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sin_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sin_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_sin_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sin_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xb5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_sin_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xb5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sqrt_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xd5,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xd5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xd5,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sqrt_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xd5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_sqrt_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xd5,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_sqrt_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_sqrt_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xb3,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_sqrt_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xb3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_sqrt_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xb3,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xb3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_sqrt_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xb3,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_trunc_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f16_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_trunc_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f16_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xdd,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_trunc_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xdd,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f16_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xdd,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xdd,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_trunc_f16_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xdd,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] v_trunc_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f32_e64_dpp v5, v1 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x00,0x01,0x77,0x39,0x05] v_trunc_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] -// GFX12: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f32_e64_dpp v5, v1 mul:2 dpp8:[7,6,5,4,3,2,1,0] ; encoding: [0x05,0x00,0xa1,0xd5,0xe9,0x00,0x00,0x08,0x01,0x77,0x39,0x05] v_trunc_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 -// GFX12: [0x05,0x00,0xa1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] +// GFX12: v_trunc_f32_e64_dpp v5, v1 mul:4 dpp8:[7,6,5,4,3,2,1,0] fi:1 ; encoding: [0x05,0x00,0xa1,0xd5,0xea,0x00,0x00,0x10,0x01,0x77,0x39,0x05] v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] fi:0 -// GFX12: [0xff,0x81,0xa1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] +// GFX12: v_trunc_f32_e64_dpp v255, -|v255| clamp div:2 dpp8:[0,0,0,0,0,0,0,0] ; encoding: [0xff,0x81,0xa1,0xd5,0xe9,0x00,0x00,0x38,0xff,0x00,0x00,0x00] -- cgit v1.2.3 From 939c94bbb4731aa1c7dda47b0e4497a82ae6f46a Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Fri, 13 Dec 2024 17:03:36 +0000 Subject: [Github] Bump CI container to LLVM 19.1.5 (#119809) Bump the CI container version to the latest release. --- .github/workflows/containers/github-action-ci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/containers/github-action-ci/Dockerfile b/.github/workflows/containers/github-action-ci/Dockerfile index 32a809ee268e..da11803cad10 100644 --- a/.github/workflows/containers/github-action-ci/Dockerfile +++ b/.github/workflows/containers/github-action-ci/Dockerfile @@ -2,7 +2,7 @@ FROM docker.io/library/ubuntu:22.04 as base ENV LLVM_SYSROOT=/opt/llvm FROM base as stage1-toolchain -ENV LLVM_VERSION=19.1.2 +ENV LLVM_VERSION=19.1.5 RUN apt-get update && \ apt-get install -y \ -- cgit v1.2.3 From 0d9fc1743378c73012828698122c46dc580d29eb Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 13 Dec 2024 09:09:20 -0800 Subject: [GISel] Remove unused DataLayout operand from getApproximateEVTForLLT (#119833) --- llvm/include/llvm/CodeGen/LowLevelTypeUtils.h | 2 +- llvm/include/llvm/CodeGen/TargetLowering.h | 14 ++++++-------- llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp | 15 +++++---------- llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp | 4 ++-- llvm/lib/CodeGen/GlobalISel/LoadStoreOpt.cpp | 2 +- llvm/lib/CodeGen/LowLevelTypeUtils.cpp | 5 ++--- llvm/lib/CodeGen/TargetLoweringBase.cpp | 2 +- 7 files changed, 18 insertions(+), 26 deletions(-) diff --git a/llvm/include/llvm/CodeGen/LowLevelTypeUtils.h b/llvm/include/llvm/CodeGen/LowLevelTypeUtils.h index 7d99b7731767..142e5cd4e7ad 100644 --- a/llvm/include/llvm/CodeGen/LowLevelTypeUtils.h +++ b/llvm/include/llvm/CodeGen/LowLevelTypeUtils.h @@ -31,7 +31,7 @@ LLT getLLTForType(Type &Ty, const DataLayout &DL); /// Get a rough equivalent of an MVT for a given LLT. MVT can't distinguish /// pointers, so these will convert to a plain integer. MVT getMVTForLLT(LLT Ty); -EVT getApproximateEVTForLLT(LLT Ty, const DataLayout &DL, LLVMContext &Ctx); +EVT getApproximateEVTForLLT(LLT Ty, LLVMContext &Ctx); /// Get a rough equivalent of an LLT for a given MVT. LLT does not yet support /// scalarable vector types, and will assert if used. diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h index aaab209bfa75..3751aac4df8e 100644 --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -2979,10 +2979,9 @@ public: } virtual bool isTruncateFree(EVT FromVT, EVT ToVT) const { return false; } - virtual bool isTruncateFree(LLT FromTy, LLT ToTy, const DataLayout &DL, - LLVMContext &Ctx) const { - return isTruncateFree(getApproximateEVTForLLT(FromTy, DL, Ctx), - getApproximateEVTForLLT(ToTy, DL, Ctx)); + virtual bool isTruncateFree(LLT FromTy, LLT ToTy, LLVMContext &Ctx) const { + return isTruncateFree(getApproximateEVTForLLT(FromTy, Ctx), + getApproximateEVTForLLT(ToTy, Ctx)); } /// Return true if truncating the specific node Val to type VT2 is free. @@ -3065,10 +3064,9 @@ public: } virtual bool isZExtFree(EVT FromTy, EVT ToTy) const { return false; } - virtual bool isZExtFree(LLT FromTy, LLT ToTy, const DataLayout &DL, - LLVMContext &Ctx) const { - return isZExtFree(getApproximateEVTForLLT(FromTy, DL, Ctx), - getApproximateEVTForLLT(ToTy, DL, Ctx)); + virtual bool isZExtFree(LLT FromTy, LLT ToTy, LLVMContext &Ctx) const { + return isZExtFree(getApproximateEVTForLLT(FromTy, Ctx), + getApproximateEVTForLLT(ToTy, Ctx)); } /// Return true if zero-extending the specific node Val to type VT2 is free diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp index b46d4baf72a2..e31980041e19 100644 --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp @@ -3124,7 +3124,6 @@ bool CombinerHelper::matchHoistLogicOpWithSameOpcodeHands( case TargetOpcode::G_TRUNC: { // Match: logic (trunc X), (trunc Y) -> trunc (logic X, Y) const MachineFunction *MF = MI.getMF(); - const DataLayout &DL = MF->getDataLayout(); LLVMContext &Ctx = MF->getFunction().getContext(); LLT DstTy = MRI.getType(Dst); @@ -3132,8 +3131,7 @@ bool CombinerHelper::matchHoistLogicOpWithSameOpcodeHands( // Be extra careful sinking truncate. If it's free, there's no benefit in // widening a binop. - if (TLI.isZExtFree(DstTy, XTy, DL, Ctx) && - TLI.isTruncateFree(XTy, DstTy, DL, Ctx)) + if (TLI.isZExtFree(DstTy, XTy, Ctx) && TLI.isTruncateFree(XTy, DstTy, Ctx)) return false; break; } @@ -5074,9 +5072,8 @@ bool CombinerHelper::matchNarrowBinopFeedingAnd( auto &MF = *MI.getMF(); const auto &TLI = getTargetLowering(); LLVMContext &Ctx = MF.getFunction().getContext(); - auto &DL = MF.getDataLayout(); - if (!TLI.isTruncateFree(WideTy, NarrowTy, DL, Ctx) || - !TLI.isZExtFree(NarrowTy, WideTy, DL, Ctx)) + if (!TLI.isTruncateFree(WideTy, NarrowTy, Ctx) || + !TLI.isZExtFree(NarrowTy, WideTy, Ctx)) return false; if (!isLegalOrBeforeLegalizer({TargetOpcode::G_TRUNC, {NarrowTy, WideTy}}) || !isLegalOrBeforeLegalizer({TargetOpcode::G_ZEXT, {WideTy, NarrowTy}})) @@ -5380,8 +5377,7 @@ bool CombinerHelper::matchUDivByConst(MachineInstr &MI) { AttributeList Attr = MF.getFunction().getAttributes(); const auto &TLI = getTargetLowering(); LLVMContext &Ctx = MF.getFunction().getContext(); - auto &DL = MF.getDataLayout(); - if (TLI.isIntDivCheap(getApproximateEVTForLLT(DstTy, DL, Ctx), Attr)) + if (TLI.isIntDivCheap(getApproximateEVTForLLT(DstTy, Ctx), Attr)) return false; // Don't do this for minsize because the instruction sequence is usually @@ -5430,8 +5426,7 @@ bool CombinerHelper::matchSDivByConst(MachineInstr &MI) { AttributeList Attr = MF.getFunction().getAttributes(); const auto &TLI = getTargetLowering(); LLVMContext &Ctx = MF.getFunction().getContext(); - auto &DL = MF.getDataLayout(); - if (TLI.isIntDivCheap(getApproximateEVTForLLT(DstTy, DL, Ctx), Attr)) + if (TLI.isIntDivCheap(getApproximateEVTForLLT(DstTy, Ctx), Attr)) return false; // Don't do this for minsize because the instruction sequence is usually diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp index 30557e6a2304..09815e85ea85 100644 --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp @@ -170,9 +170,9 @@ bool CombinerHelper::isCastFree(unsigned Opcode, LLT ToTy, LLT FromTy) const { switch (Opcode) { case TargetOpcode::G_ANYEXT: case TargetOpcode::G_ZEXT: - return TLI.isZExtFree(FromTy, ToTy, DL, Ctx); + return TLI.isZExtFree(FromTy, ToTy, Ctx); case TargetOpcode::G_TRUNC: - return TLI.isTruncateFree(FromTy, ToTy, DL, Ctx); + return TLI.isTruncateFree(FromTy, ToTy, Ctx); default: return false; } diff --git a/llvm/lib/CodeGen/GlobalISel/LoadStoreOpt.cpp b/llvm/lib/CodeGen/GlobalISel/LoadStoreOpt.cpp index e411e73dbe73..08d30db0ca89 100644 --- a/llvm/lib/CodeGen/GlobalISel/LoadStoreOpt.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LoadStoreOpt.cpp @@ -327,7 +327,7 @@ bool LoadStoreOpt::mergeStores(SmallVectorImpl &StoresToMerge) { for (MergeSizeBits = MaxSizeBits; MergeSizeBits > 1; MergeSizeBits /= 2) { LLT StoreTy = LLT::scalar(MergeSizeBits); EVT StoreEVT = - getApproximateEVTForLLT(StoreTy, DL, MF->getFunction().getContext()); + getApproximateEVTForLLT(StoreTy, MF->getFunction().getContext()); if (LegalSizes.size() > MergeSizeBits && LegalSizes[MergeSizeBits] && TLI->canMergeStoresTo(AS, StoreEVT, *MF) && (TLI->isTypeLegal(StoreEVT))) diff --git a/llvm/lib/CodeGen/LowLevelTypeUtils.cpp b/llvm/lib/CodeGen/LowLevelTypeUtils.cpp index 1602cd99c383..936c9fbb2fff 100644 --- a/llvm/lib/CodeGen/LowLevelTypeUtils.cpp +++ b/llvm/lib/CodeGen/LowLevelTypeUtils.cpp @@ -54,10 +54,9 @@ MVT llvm::getMVTForLLT(LLT Ty) { Ty.getElementCount()); } -EVT llvm::getApproximateEVTForLLT(LLT Ty, const DataLayout &DL, - LLVMContext &Ctx) { +EVT llvm::getApproximateEVTForLLT(LLT Ty, LLVMContext &Ctx) { if (Ty.isVector()) { - EVT EltVT = getApproximateEVTForLLT(Ty.getElementType(), DL, Ctx); + EVT EltVT = getApproximateEVTForLLT(Ty.getElementType(), Ctx); return EVT::getVectorVT(Ctx, EltVT, Ty.getElementCount()); } diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index 9dc2701654b8..3b0e9c7526fd 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -1750,7 +1750,7 @@ bool TargetLoweringBase::allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, LLT Ty, const MachineMemOperand &MMO, unsigned *Fast) const { - EVT VT = getApproximateEVTForLLT(Ty, DL, Context); + EVT VT = getApproximateEVTForLLT(Ty, Context); return allowsMemoryAccess(Context, DL, VT, MMO.getAddrSpace(), MMO.getAlign(), MMO.getFlags(), Fast); } -- cgit v1.2.3 From 3fcc302af34f648fb7a56557b6a504fcbf49a115 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Fri, 13 Dec 2024 09:09:57 -0800 Subject: [lldb] Add a progress event for executing an expression (#119757) Expressions can take arbitrary amounts of time to run, so IDEs might want to be informed about the fact that an expression is currently being executed. rdar://141253078 --- lldb/source/Expression/FunctionCaller.cpp | 5 +++++ lldb/source/Expression/UserExpression.cpp | 13 +++++++++++++ lldb/test/Shell/Expr/TestExecProgress.test | 8 ++++++++ 3 files changed, 26 insertions(+) create mode 100644 lldb/test/Shell/Expr/TestExecProgress.test diff --git a/lldb/source/Expression/FunctionCaller.cpp b/lldb/source/Expression/FunctionCaller.cpp index 67f9cd5758be..ddf1e1151bdc 100644 --- a/lldb/source/Expression/FunctionCaller.cpp +++ b/lldb/source/Expression/FunctionCaller.cpp @@ -8,6 +8,7 @@ #include "lldb/Expression/FunctionCaller.h" #include "lldb/Core/Module.h" +#include "lldb/Core/Progress.h" #include "lldb/Expression/DiagnosticManager.h" #include "lldb/Expression/IRExecutionUnit.h" #include "lldb/Interpreter/CommandReturnObject.h" @@ -338,6 +339,10 @@ lldb::ExpressionResults FunctionCaller::ExecuteFunction( DiagnosticManager &diagnostic_manager, Value &results) { lldb::ExpressionResults return_value = lldb::eExpressionSetupError; + Debugger *debugger = + exe_ctx.GetTargetPtr() ? &exe_ctx.GetTargetPtr()->GetDebugger() : nullptr; + Progress progress("Calling function", FunctionName(), {}, debugger); + // FunctionCaller::ExecuteFunction execution is always just to get the // result. Unless explicitly asked for, ignore breakpoints and unwind on // error. diff --git a/lldb/source/Expression/UserExpression.cpp b/lldb/source/Expression/UserExpression.cpp index f1f69ae1c89b..af4b477660ee 100644 --- a/lldb/source/Expression/UserExpression.cpp +++ b/lldb/source/Expression/UserExpression.cpp @@ -14,6 +14,7 @@ #include #include "lldb/Core/Module.h" +#include "lldb/Core/Progress.h" #include "lldb/Expression/DiagnosticManager.h" #include "lldb/Expression/ExpressionVariable.h" #include "lldb/Expression/IRExecutionUnit.h" @@ -424,6 +425,18 @@ UserExpression::Execute(DiagnosticManager &diagnostic_manager, const EvaluateExpressionOptions &options, lldb::UserExpressionSP &shared_ptr_to_me, lldb::ExpressionVariableSP &result_var) { + Debugger *debugger = + exe_ctx.GetTargetPtr() ? &exe_ctx.GetTargetPtr()->GetDebugger() : nullptr; + std::string details; + if (m_options.IsForUtilityExpr()) + details = "LLDB utility"; + else if (m_expr_text.size() > 15) + details = m_expr_text.substr(0, 14) + "…"; + else + details = m_expr_text; + + Progress progress("Running expression", details, {}, debugger); + lldb::ExpressionResults expr_result = DoExecute( diagnostic_manager, exe_ctx, options, shared_ptr_to_me, result_var); Target *target = exe_ctx.GetTargetPtr(); diff --git a/lldb/test/Shell/Expr/TestExecProgress.test b/lldb/test/Shell/Expr/TestExecProgress.test new file mode 100644 index 000000000000..3f0ae9ffe563 --- /dev/null +++ b/lldb/test/Shell/Expr/TestExecProgress.test @@ -0,0 +1,8 @@ +# RUN: %lldb -s %s | FileCheck %s +log enable lldb event +expr 1 +expr 1 // And a very long comment. +quit + +# CHECK: {{title = "Running expression", details = "1"}} +# CHECK: {{title = "Running expression", details = "1 // And a ver…"}} -- cgit v1.2.3 From 003a721c1c9e3a99d6d0c1a6755443b260235537 Mon Sep 17 00:00:00 2001 From: Ian Wood Date: Fri, 13 Dec 2024 17:14:24 +0000 Subject: [NFC] Don't recompute type name (#119631) This change uses a local static variable to cache the computed `StringRef` containing the type's name. I found that `RelWithDebInfo` builds of MLIR were spending a relatively large amount of time in `StringRef::find` and I tracked it down to `getTypeName` which utilizes `StringRef` methods that are defined in a separate translation unit. This is especially impactful on perf because `getTypeName` is supposed to be used for debug logging. See an example here: https://github.com/llvm/llvm-project/blob/4b825c7417f72ee88ee3e4316d0c01ed463f1241/mlir/include/mlir/IR/Types.h#L294-L300 --- llvm/include/llvm/Support/TypeName.h | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/llvm/include/llvm/Support/TypeName.h b/llvm/include/llvm/Support/TypeName.h index 9547e76a7fa7..61ba09c21630 100644 --- a/llvm/include/llvm/Support/TypeName.h +++ b/llvm/include/llvm/Support/TypeName.h @@ -13,18 +13,8 @@ namespace llvm { -/// We provide a function which tries to compute the (demangled) name of a type -/// statically. -/// -/// This routine may fail on some platforms or for particularly unusual types. -/// Do not use it for anything other than logging and debugging aids. It isn't -/// portable or dependendable in any real sense. -/// -/// The returned StringRef will point into a static storage duration string. -/// However, it may not be null terminated and may be some strangely aligned -/// inner substring of a larger string. -template -inline StringRef getTypeName() { +namespace detail { +template inline StringRef getTypeNameImpl() { #if defined(__clang__) || defined(__GNUC__) StringRef Name = __PRETTY_FUNCTION__; @@ -58,6 +48,22 @@ inline StringRef getTypeName() { return "UNKNOWN_TYPE"; #endif } +} // namespace detail + +/// We provide a function which tries to compute the (demangled) name of a type +/// statically. +/// +/// This routine may fail on some platforms or for particularly unusual types. +/// Do not use it for anything other than logging and debugging aids. It isn't +/// portable or dependendable in any real sense. +/// +/// The returned StringRef will point into a static storage duration string. +/// However, it may not be null terminated and may be some strangely aligned +/// inner substring of a larger string. +template inline StringRef getTypeName() { + static StringRef Name = detail::getTypeNameImpl(); + return Name; +} } // namespace llvm -- cgit v1.2.3 From 6d69d18437adc79ada8fbc852b3ffb4d797cebb4 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Fri, 13 Dec 2024 09:23:27 -0800 Subject: [OpenACC] enable 'attach' clause sema for 'data' and 'enter data' This is very similar to deviceptr, and is the same implementation as for combined/compute constructs, so this just enables that, and adds tests. --- clang/lib/Sema/SemaOpenACC.cpp | 7 --- .../test/AST/ast-print-openacc-data-construct.cpp | 3 + .../test/SemaOpenACC/data-construct-attach-ast.cpp | 66 ++++++++++++++++++++++ .../SemaOpenACC/data-construct-attach-clause.c | 65 +++++++++++++++++++++ clang/test/SemaOpenACC/data-construct.cpp | 4 +- 5 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 clang/test/SemaOpenACC/data-construct-attach-ast.cpp create mode 100644 clang/test/SemaOpenACC/data-construct-attach-clause.c diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index dbf392ba1ed1..476b7fc3c3dc 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -1013,13 +1013,6 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitCreateClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitAttachClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute'/'combined' constructs, - // and 'compute'/'combined' constructs are the only construct that can do - // anything with this yet, so skip/treat as unimplemented in this case. - if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && - !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) - return isNotImplemented(); - // ActOnVar ensured that everything is a valid variable reference, but we // still have to make sure it is a pointer type. llvm::SmallVector VarList{Clause.getVarList()}; diff --git a/clang/test/AST/ast-print-openacc-data-construct.cpp b/clang/test/AST/ast-print-openacc-data-construct.cpp index 9bd91f2768ea..d3acc9f4a3a3 100644 --- a/clang/test/AST/ast-print-openacc-data-construct.cpp +++ b/clang/test/AST/ast-print-openacc-data-construct.cpp @@ -106,5 +106,8 @@ void foo() { // CHECK: #pragma acc data default(none) deviceptr(iPtr, arrayPtr[0]) #pragma acc data default(none) deviceptr(iPtr, arrayPtr[0]) + +// CHECK: #pragma acc data default(none) attach(iPtr, arrayPtr[0]) +#pragma acc data default(none) attach(iPtr, arrayPtr[0]) ; } diff --git a/clang/test/SemaOpenACC/data-construct-attach-ast.cpp b/clang/test/SemaOpenACC/data-construct-attach-ast.cpp new file mode 100644 index 000000000000..f480e8bb61a7 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-attach-ast.cpp @@ -0,0 +1,66 @@ +// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s + +// Test this with PCH. +// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s +// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s + +#ifndef PCH_HELPER +#define PCH_HELPER + +int Global; +short GlobalArray[5]; + +void NormalUses(float *PointerParam) { + // CHECK: FunctionDecl{{.*}}NormalUses + // CHECK: ParmVarDecl + // CHECK-NEXT: CompoundStmt + +#pragma acc data default(present) attach(PointerParam) + for(int i = 0; i < 5; ++i); + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(present) + // CHECK-NEXT: attach clause + // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt +} + +template +void TemplUses(T *t) { + // CHECK-NEXT: FunctionTemplateDecl + // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T + // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T *)' + // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T *' + // CHECK-NEXT: CompoundStmt + +#pragma acc data default(present) attach(t) + for(int i = 0; i < 5; ++i); + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(present) + // CHECK-NEXT: attach clause + // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}} 't' 'T *' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt + + + // Check the instantiated versions of the above. + // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int *)' implicit_instantiation + // CHECK-NEXT: TemplateArgument type 'int' + // CHECK-NEXT: BuiltinType{{.*}} 'int' + // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int *' + // CHECK-NEXT: CompoundStmt + + // CHECK-NEXT: OpenACCDataConstruct{{.*}} data + // CHECK-NEXT: default(present) + // CHECK-NEXT: attach clause + // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 't' 'int *' + // CHECK-NEXT: ForStmt + // CHECK: NullStmt + +} + +void Inst() { + int i; + TemplUses(&i); +} +#endif diff --git a/clang/test/SemaOpenACC/data-construct-attach-clause.c b/clang/test/SemaOpenACC/data-construct-attach-clause.c new file mode 100644 index 000000000000..49a708e49d24 --- /dev/null +++ b/clang/test/SemaOpenACC/data-construct-attach-clause.c @@ -0,0 +1,65 @@ +// RUN: %clang_cc1 %s -fopenacc -verify + +struct S { + int IntMem; + int *PtrMem; +}; + +void uses() { + int LocalInt; + int *LocalPtr; + int Array[5]; + int *PtrArray[5]; + struct S s; + + // expected-error@+1{{expected pointer in 'attach' clause, type is 'int'}} +#pragma acc data default(none) attach(LocalInt) + ; + + // expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, member of a composite variable, or composite variable member}} +#pragma acc data default(none) attach(&LocalInt) + ; + + + // expected-error@+1{{expected pointer in 'attach' clause, type is 'int[5]'}} +#pragma acc enter data copyin(LocalInt) attach(Array) + + // expected-error@+1{{expected pointer in 'attach' clause, type is 'int'}} +#pragma acc data default(none) attach(Array[0]) + ; + + // expected-error@+2{{OpenACC sub-array is not allowed here}} + // expected-note@+1{{expected variable of pointer type}} +#pragma acc data default(none) attach(Array[0:1]) + ; + + // expected-error@+1{{expected pointer in 'attach' clause, type is 'int *[5]'}} +#pragma acc data default(none) attach(PtrArray) + ; + +#pragma acc data default(none) attach(PtrArray[0]) + ; + + // expected-error@+2{{OpenACC sub-array is not allowed here}} + // expected-note@+1{{expected variable of pointer type}} +#pragma acc data default(none) attach(PtrArray[0:1]) + ; + + // expected-error@+1{{expected pointer in 'attach' clause, type is 'struct S'}} +#pragma acc data default(none) attach(s) + ; + + // expected-error@+1{{expected pointer in 'attach' clause, type is 'int'}} +#pragma acc data default(none) attach(s.IntMem) + ; + +#pragma acc data default(none) attach(s.PtrMem) + ; + + // expected-error@+1{{OpenACC 'attach' clause is not valid on 'exit data' directive}} +#pragma acc exit data copyout(LocalInt) attach(PtrArray[0]) + // expected-warning@+2{{OpenACC clause 'use_device' not yet implemented}} + // expected-error@+1{{OpenACC 'attach' clause is not valid on 'host_data' directive}} +#pragma acc host_data use_device(LocalInt) attach(PtrArray[0]) + ; +} diff --git a/clang/test/SemaOpenACC/data-construct.cpp b/clang/test/SemaOpenACC/data-construct.cpp index 6a46c6837ff4..7b819f698c26 100644 --- a/clang/test/SemaOpenACC/data-construct.cpp +++ b/clang/test/SemaOpenACC/data-construct.cpp @@ -36,7 +36,6 @@ void AtLeastOneOf() { ; #pragma acc data deviceptr(VarPtr) ; - // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} #pragma acc data attach(VarPtr) ; #pragma acc data default(none) @@ -62,8 +61,7 @@ void AtLeastOneOf() { // Enter Data #pragma acc enter data copyin(Var) #pragma acc enter data create(Var) - // expected-warning@+1{{OpenACC clause 'attach' not yet implemented}} -#pragma acc enter data attach(Var) +#pragma acc enter data attach(VarPtr) // OpenACC TODO: The following 'enter data' directives should diagnose, since // they don't have at least one of the above clauses. -- cgit v1.2.3 From bc627a46a858ab1abf7a72a524ef1059b27cfa37 Mon Sep 17 00:00:00 2001 From: Paul Kirth Date: Fri, 13 Dec 2024 09:34:43 -0800 Subject: [clang-doc][NFC] Rename CHECK prefix for YAML We plan to introduce checks for other backends, like markdown. Reviewers: PeterChou1, petrhosek Reviewed By: petrhosek Pull Request: https://github.com/llvm/llvm-project/pull/119810 --- clang-tools-extra/test/clang-doc/templates.cpp | 120 ++++++++++++------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/clang-tools-extra/test/clang-doc/templates.cpp b/clang-tools-extra/test/clang-doc/templates.cpp index 4d4a25b8d3b8..d5a9e7d201e1 100644 --- a/clang-tools-extra/test/clang-doc/templates.cpp +++ b/clang-tools-extra/test/clang-doc/templates.cpp @@ -3,7 +3,7 @@ // RUN: echo "" > %t/compile_flags.txt // RUN: cp "%s" "%t/test.cpp" // RUN: clang-doc --doxygen --executor=standalone -p %t %t/test.cpp -output=%t/docs -// RUN: cat %t/docs/index.yaml | FileCheck %s --check-prefix=CHECK +// RUN: cat %t/docs/index.yaml | FileCheck %s --check-prefix=YAML // RUN: rm -rf %t template @@ -15,62 +15,62 @@ void function(bool x) {} template void ParamPackFunction(T... args); -// CHECK: --- -// CHECK-NEXT: USR: '{{([0-9A-F]{40})}}' -// CHECK-NEXT: ChildFunctions: -// CHECK-NEXT: - USR: '{{([0-9A-F]{40})}}' -// CHECK-NEXT: Name: 'ParamPackFunction' -// CHECK-NEXT: Location: -// CHECK-NEXT: - LineNumber: 16 -// CHECK-NEXT: Filename: '{{.*}}' -// CHECK-NEXT: Params: -// CHECK-NEXT: - Type: -// CHECK-NEXT: Name: 'T...' -// CHECK-NEXT: QualName: 'T...' -// CHECK-NEXT: Name: 'args' -// CHECK-NEXT: ReturnType: -// CHECK-NEXT: Type: -// CHECK-NEXT: Name: 'void' -// CHECK-NEXT: QualName: 'void' -// CHECK-NEXT: Template: -// CHECK-NEXT: Params: -// CHECK-NEXT: - Contents: 'class... T' -// CHECK-NEXT: - USR: '{{([0-9A-F]{40})}}' -// CHECK-NEXT: Name: 'function' -// CHECK-NEXT: DefLocation: -// CHECK-NEXT: LineNumber: 10 -// CHECK-NEXT: Filename: '{{.*}}' -// CHECK-NEXT: Params: -// CHECK-NEXT: - Type: -// CHECK-NEXT: Name: 'T' -// CHECK-NEXT: QualName: 'T' -// CHECK-NEXT: Name: 'x' -// CHECK-NEXT: ReturnType: -// CHECK-NEXT: Type: -// CHECK-NEXT: Name: 'void' -// CHECK-NEXT: QualName: 'void' -// CHECK-NEXT: Template: -// CHECK-NEXT: Params: -// CHECK-NEXT: - Contents: 'typename T' -// CHECK-NEXT: - Contents: 'int U = 1' -// CHECK-NEXT: - USR: '{{([0-9A-F]{40})}}' -// CHECK-NEXT: Name: 'function' -// CHECK-NEXT: DefLocation: -// CHECK-NEXT: LineNumber: 12 -// CHECK-NEXT: Filename: '{{.*}}' -// CHECK-NEXT: Params: -// CHECK-NEXT: - Type: -// CHECK-NEXT: Name: '_Bool' -// CHECK-NEXT: QualName: '_Bool' -// CHECK-NEXT: Name: 'x' -// CHECK-NEXT: ReturnType: -// CHECK-NEXT: Type: -// CHECK-NEXT: Name: 'void' -// CHECK-NEXT: QualName: 'void' -// CHECK-NEXT: Template: -// CHECK-NEXT: Specialization: -// CHECK-NEXT: SpecializationOf: '{{([0-9A-F]{40})}}' -// CHECK-NEXT: Params: -// CHECK-NEXT: - Contents: 'bool' -// CHECK-NEXT: - Contents: '0' -// CHECK-NEXT: ... +// YAML: --- +// YAML-NEXT: USR: '{{([0-9A-F]{40})}}' +// YAML-NEXT: ChildFunctions: +// YAML-NEXT: - USR: '{{([0-9A-F]{40})}}' +// YAML-NEXT: Name: 'ParamPackFunction' +// YAML-NEXT: Location: +// YAML-NEXT: - LineNumber: 16 +// YAML-NEXT: Filename: '{{.*}}' +// YAML-NEXT: Params: +// YAML-NEXT: - Type: +// YAML-NEXT: Name: 'T...' +// YAML-NEXT: QualName: 'T...' +// YAML-NEXT: Name: 'args' +// YAML-NEXT: ReturnType: +// YAML-NEXT: Type: +// YAML-NEXT: Name: 'void' +// YAML-NEXT: QualName: 'void' +// YAML-NEXT: Template: +// YAML-NEXT: Params: +// YAML-NEXT: - Contents: 'class... T' +// YAML-NEXT: - USR: '{{([0-9A-F]{40})}}' +// YAML-NEXT: Name: 'function' +// YAML-NEXT: DefLocation: +// YAML-NEXT: LineNumber: 10 +// YAML-NEXT: Filename: '{{.*}}' +// YAML-NEXT: Params: +// YAML-NEXT: - Type: +// YAML-NEXT: Name: 'T' +// YAML-NEXT: QualName: 'T' +// YAML-NEXT: Name: 'x' +// YAML-NEXT: ReturnType: +// YAML-NEXT: Type: +// YAML-NEXT: Name: 'void' +// YAML-NEXT: QualName: 'void' +// YAML-NEXT: Template: +// YAML-NEXT: Params: +// YAML-NEXT: - Contents: 'typename T' +// YAML-NEXT: - Contents: 'int U = 1' +// YAML-NEXT: - USR: '{{([0-9A-F]{40})}}' +// YAML-NEXT: Name: 'function' +// YAML-NEXT: DefLocation: +// YAML-NEXT: LineNumber: 12 +// YAML-NEXT: Filename: '{{.*}}' +// YAML-NEXT: Params: +// YAML-NEXT: - Type: +// YAML-NEXT: Name: '_Bool' +// YAML-NEXT: QualName: '_Bool' +// YAML-NEXT: Name: 'x' +// YAML-NEXT: ReturnType: +// YAML-NEXT: Type: +// YAML-NEXT: Name: 'void' +// YAML-NEXT: QualName: 'void' +// YAML-NEXT: Template: +// YAML-NEXT: Specialization: +// YAML-NEXT: SpecializationOf: '{{([0-9A-F]{40})}}' +// YAML-NEXT: Params: +// YAML-NEXT: - Contents: 'bool' +// YAML-NEXT: - Contents: '0' +// YAML-NEXT: ... -- cgit v1.2.3