diff --git a/clang/include/clang/AST/ParentMapContext.h b/clang/include/clang/AST/ParentMapContext.h --- a/clang/include/clang/AST/ParentMapContext.h +++ b/clang/include/clang/AST/ParentMapContext.h @@ -69,7 +69,7 @@ ASTContext &ASTCtx; class ParentMap; ast_type_traits::TraversalKind Traversal = ast_type_traits::TK_AsIs; - std::unique_ptr Parents; + std::map> Parents; }; class TraversalKindScope { diff --git a/clang/lib/AST/ParentMapContext.cpp b/clang/lib/AST/ParentMapContext.cpp --- a/clang/lib/AST/ParentMapContext.cpp +++ b/clang/lib/AST/ParentMapContext.cpp @@ -23,7 +23,7 @@ ParentMapContext::~ParentMapContext() = default; -void ParentMapContext::clear() { Parents.reset(); } +void ParentMapContext::clear() { Parents.clear(); } const Expr *ParentMapContext::traverseIgnored(const Expr *E) const { return traverseIgnored(const_cast(E)); @@ -116,79 +116,11 @@ } } - DynTypedNodeList getParents(ast_type_traits::TraversalKind TK, - const ast_type_traits::DynTypedNode &Node) { - if (Node.getNodeKind().hasPointerIdentity()) { - auto ParentList = - getDynNodeFromMap(Node.getMemoizationData(), PointerParents); - if (ParentList.size() == 1 && - TK == ast_type_traits::TK_IgnoreUnlessSpelledInSource) { - const auto *E = ParentList[0].get(); - const auto *Child = Node.get(); - if (E && Child) - return AscendIgnoreUnlessSpelledInSource(E, Child); - } - return ParentList; - } + DynTypedNodeList getParents(const ast_type_traits::DynTypedNode &Node) { + if (Node.getNodeKind().hasPointerIdentity()) + return getDynNodeFromMap(Node.getMemoizationData(), PointerParents); return getDynNodeFromMap(Node, OtherParents); } - - ast_type_traits::DynTypedNode - AscendIgnoreUnlessSpelledInSource(const Expr *E, const Expr *Child) { - - auto ShouldSkip = [](const Expr *E, const Expr *Child) { - if (isa(E)) - return true; - - if (isa(E)) - return true; - - if (isa(E)) - return true; - - if (isa(E)) - return true; - - if (isa(E)) - return true; - - if (isa(E)) - return true; - - auto SR = Child->getSourceRange(); - - if (const auto *C = dyn_cast(E)) { - if (C->getSourceRange() == SR || !isa(C)) - return true; - } - - if (const auto *C = dyn_cast(E)) { - if (C->getSourceRange() == SR) - return true; - } - - if (const auto *C = dyn_cast(E)) { - if (C->getSourceRange() == SR) - return true; - } - return false; - }; - - while (ShouldSkip(E, Child)) { - auto It = PointerParents.find(E); - if (It == PointerParents.end()) - break; - const auto *S = It->second.dyn_cast(); - if (!S) - return getSingleDynTypedNodeFromParentMap(It->second); - const auto *P = dyn_cast(S); - if (!P) - return ast_type_traits::DynTypedNode::create(*S); - Child = E; - E = P; - } - return ast_type_traits::DynTypedNode::create(*E); - } }; /// Template specializations to abstract away from pointers and TypeLocs. @@ -219,7 +151,8 @@ class ParentMapContext::ParentMap::ASTVisitor : public RecursiveASTVisitor { public: - ASTVisitor(ParentMap &Map) : Map(Map) {} + ASTVisitor(ParentMap &Map, ParentMapContext &MapCtx) + : Map(Map), MapCtx(MapCtx) {} private: friend class RecursiveASTVisitor; @@ -289,8 +222,11 @@ } bool TraverseStmt(Stmt *StmtNode) { - return TraverseNode(StmtNode, StmtNode, - [&] { return VisitorBase::TraverseStmt(StmtNode); }, + Stmt *FilteredNode = StmtNode; + if (auto *ExprNode = dyn_cast_or_null(FilteredNode)) + FilteredNode = MapCtx.traverseIgnored(ExprNode); + return TraverseNode(FilteredNode, FilteredNode, + [&] { return VisitorBase::TraverseStmt(FilteredNode); }, &Map.PointerParents); } @@ -309,18 +245,21 @@ } ParentMap ⤅ + ParentMapContext &MapCtx; llvm::SmallVector ParentStack; }; ParentMapContext::ParentMap::ParentMap(ASTContext &Ctx) { - ASTVisitor(*this).TraverseAST(Ctx); + ASTVisitor(*this, Ctx.getParentMapContext()).TraverseAST(Ctx); } DynTypedNodeList ParentMapContext::getParents(const ast_type_traits::DynTypedNode &Node) { - if (!Parents) + std::unique_ptr &P = Parents[Traversal]; + if (!P) // We build the parent map for the traversal scope (usually whole TU), as // hasAncestor can escape any subtree. - Parents = std::make_unique(ASTCtx); - return Parents->getParents(getTraversalKind(), Node); + P = std::make_unique(ASTCtx); + return P->getParents(Node); } + diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -3383,6 +3383,25 @@ Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), "->"); // Try to parse a 'type-constraint' + CXXScopeSpec SS; + if (ParseOptionalCXXScopeSpecifier(SS, ParsedType(), + /*EnteringContext=*/false, + /*MayBePseudoDestructor=*/nullptr, + // If this is not a type-constraint, + // then this scope-spec is part of + // the typename of a non-type + // template parameter + /*IsTypename=*/true, + /*LastII=*/nullptr, + // We won't find concepts in + // non-namespaces anyway, so might as + // well parse this correctly for + // possible type names. + /*OnlyNamespace=*/false, + /*SuppressDiagnostic=*/true)) { + SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch); + break; + } if (TryAnnotateTypeConstraint()) { SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch); break; @@ -3392,13 +3411,8 @@ SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch); break; } - CXXScopeSpec SS; - if (Tok.is(tok::annot_cxxscope)) { - Actions.RestoreNestedNameSpecifierAnnotation(Tok.getAnnotationValue(), - Tok.getAnnotationRange(), - SS); + if (Tok.is(tok::annot_cxxscope)) ConsumeAnnotationToken(); - } Req = Actions.ActOnCompoundRequirement( Expression.get(), NoexceptLoc, SS, takeTemplateIdAnnotation(Tok), diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -2047,14 +2047,12 @@ if (const auto *TC = TTP->getTypeConstraint()) { TemplateArgumentListInfo TransformedArgs; const auto *ArgsAsWritten = TC->getTemplateArgsAsWritten(); - if (!ArgsAsWritten || - SemaRef.Subst(ArgsAsWritten->getTemplateArgs(), + if (SemaRef.Subst(ArgsAsWritten->getTemplateArgs(), ArgsAsWritten->NumTemplateArgs, TransformedArgs, Args)) SemaRef.AttachTypeConstraint( TC->getNestedNameSpecifierLoc(), TC->getConceptNameInfo(), - TC->getNamedConcept(), ArgsAsWritten ? &TransformedArgs : nullptr, - NewTTP, + TC->getNamedConcept(), &TransformedArgs, NewTTP, NewTTP->isParameterPack() ? cast(TC->getImmediatelyDeclaredConstraint()) ->getEllipsisLoc() diff --git a/clang/test/Parser/cxx2a-abbreviated-templates.cpp b/clang/test/Parser/cxx2a-abbreviated-templates.cpp deleted file mode 100644 --- a/clang/test/Parser/cxx2a-abbreviated-templates.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify -// expected-no-diagnostics - -template -concept C = true; - -namespace ns { - template - concept D = true; -} - -void foo(C auto a, - C auto b, - ns::D auto c, - ns::D auto d, - const C auto e, - const C auto f, - const ns::D auto g, - const ns::D auto h); \ No newline at end of file diff --git a/clang/test/Parser/cxx2a-concepts-requires-expr.cpp b/clang/test/Parser/cxx2a-concepts-requires-expr.cpp --- a/clang/test/Parser/cxx2a-concepts-requires-expr.cpp +++ b/clang/test/Parser/cxx2a-concepts-requires-expr.cpp @@ -108,38 +108,34 @@ bool r30 = requires { { 0 } noexcept -> C2; }; -namespace ns { template concept C = true; } - -bool r31 = requires { { 0 } noexcept -> ns::C; }; - template T i1 = 0; -bool r32 = requires { requires false, 1; }; +bool r31 = requires { requires false, 1; }; // expected-error@-1 {{expected ';' at end of requirement}} -bool r33 = requires { 0 noexcept; }; +bool r32 = requires { 0 noexcept; }; // expected-error@-1 {{'noexcept' can only be used in a compound requirement (with '{' '}' around the expression)}} -bool r34 = requires { 0 int; }; +bool r33 = requires { 0 int; }; // expected-error@-1 {{expected ';' at end of requirement}} -bool r35 = requires { requires true }; +bool r34 = requires { requires true }; // expected-error@-1 {{expected ';' at end of requirement}} -bool r36 = requires (bool b) { requires sizeof(b) == 1; }; +bool r35 = requires (bool b) { requires sizeof(b) == 1; }; -void r37(bool b) requires requires { 1 } {} +void r36(bool b) requires requires { 1 } {} // expected-error@-1 {{expected ';' at end of requirement}} -bool r38 = requires { requires { 1; }; }; +bool r37 = requires { requires { 1; }; }; // expected-warning@-1 {{this requires expression will only be checked for syntactic validity; did you intend to place it in a nested requirement? (add another 'requires' before the expression)}} -bool r39 = requires { requires () { 1; }; }; +bool r38 = requires { requires () { 1; }; }; // expected-warning@-1 {{this requires expression will only be checked for syntactic validity; did you intend to place it in a nested requirement? (add another 'requires' before the expression)}} -bool r40 = requires { requires (int i) { i; }; }; +bool r39 = requires { requires (int i) { i; }; }; // expected-warning@-1 {{this requires expression will only be checked for syntactic validity; did you intend to place it in a nested requirement? (add another 'requires' before the expression)}} -bool r41 = requires { requires (); }; +bool r40 = requires { requires (); }; // expected-error@-1 {{expected expression}} diff --git a/clang/test/Parser/cxx2a-placeholder-type-constraint.cpp b/clang/test/Parser/cxx2a-placeholder-type-constraint.cpp --- a/clang/test/Parser/cxx2a-placeholder-type-constraint.cpp +++ b/clang/test/Parser/cxx2a-placeholder-type-constraint.cpp @@ -3,33 +3,24 @@ template concept C = true; -namespace ns { - template - concept D = true; -} - int foo() { - {ns::D auto a = 1;} - {C auto a = 1;} - {C<> auto a = 1;} - {C auto a = 1;} - {ns::D auto a = 1;} - {const ns::D auto &a = 1;} - {const C auto &a = 1;} - {const C<> auto &a = 1;} - {const C auto &a = 1;} - {const ns::D auto &a = 1;} - {C decltype(auto) a = 1;} - {C<> decltype(auto) a = 1;} - {C decltype(auto) a = 1;} - {const C<> decltype(auto) &a = 1;} // expected-error{{'decltype(auto)' cannot be combined with other type specifiers}} + C auto a4 = 1; + C<> auto a5 = 1; + C auto a6 = 1; + const C auto &a7 = 1; + const C<> auto &a8 = 1; + const C auto &a9 = 1; + C decltype(auto) a10 = 1; + C<> decltype(auto) a11 = 1; + C decltype(auto) a12 = 1; + const C<> decltype(auto) &a13 = 1; // expected-error{{'decltype(auto)' cannot be combined with other type specifiers}} // expected-error@-1{{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}} - {const C decltype(auto) &a = 1;} // expected-error{{'decltype(auto)' cannot be combined with other type specifiers}} + const C decltype(auto) &a14 = 1; // expected-error{{'decltype(auto)' cannot be combined with other type specifiers}} // expected-error@-1{{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}} - {C a = 1;} + C a15 = 1; // expected-error@-1{{expected 'auto' or 'decltype(auto)' after concept name}} - {C decltype a19 = 1;} + C decltype a19 = 1; // expected-error@-1{{expected '('}} - {C decltype(1) a20 = 1;} + C decltype(1) a20 = 1; // expected-error@-1{{expected 'auto' or 'decltype(auto)' after concept name}} } \ No newline at end of file diff --git a/libunwind/CMakeLists.txt b/libunwind/CMakeLists.txt --- a/libunwind/CMakeLists.txt +++ b/libunwind/CMakeLists.txt @@ -16,7 +16,7 @@ ) if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR LIBUNWIND_STANDALONE_BUILD) - project(libunwind LANGUAGES C CXX ASM) + project(libunwind) # Rely on llvm-config. set(CONFIG_OUTPUT) diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -15033,7 +15033,8 @@ Arguments: """""""""" -The first operand is a vector of pointers which holds all memory addresses to read. The second operand is an alignment of the source addresses. It must be 0 or a power of two constant integer value. The third operand, mask, is a vector of boolean values with the same number of elements as the return type. The fourth is a pass-through value that is used to fill the masked-off lanes of the result. The return type, underlying type of the vector of pointers and the type of the '``passthru``' operand are the same vector types. +The first operand is a vector of pointers which holds all memory addresses to read. The second operand is an alignment of the source addresses. It must be a constant integer value. The third operand, mask, is a vector of boolean values with the same number of elements as the return type. The fourth is a pass-through value that is used to fill the masked-off lanes of the result. The return type, underlying type of the vector of pointers and the type of the '``passthru``' operand are the same vector types. + Semantics: """""""""" @@ -15085,7 +15086,8 @@ Arguments: """""""""" -The first operand is a vector value to be written to memory. The second operand is a vector of pointers, pointing to where the value elements should be stored. It has the same underlying type as the value operand. The third operand is an alignment of the destination addresses. It must be 0 or a power of two constant integer value. The fourth operand, mask, is a vector of boolean values. The types of the mask and the value operand must have the same number of vector elements. +The first operand is a vector value to be written to memory. The second operand is a vector of pointers, pointing to where the value elements should be stored. It has the same underlying type as the value operand. The third operand is an alignment of the destination addresses. The fourth operand, mask, is a vector of boolean values. The types of the mask and the value operand must have the same number of vector elements. + Semantics: """""""""" diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -4651,21 +4651,6 @@ break; } - case Intrinsic::masked_gather: { - const APInt &Alignment = - cast(Call.getArgOperand(1))->getValue(); - Assert(Alignment.isNullValue() || Alignment.isPowerOf2(), - "masked_gather: alignment must be 0 or a power of 2", Call); - break; - } - case Intrinsic::masked_scatter: { - const APInt &Alignment = - cast(Call.getArgOperand(2))->getValue(); - Assert(Alignment.isNullValue() || Alignment.isPowerOf2(), - "masked_scatter: alignment must be 0 or a power of 2", Call); - break; - } - case Intrinsic::experimental_guard: { Assert(isa(Call), "experimental_guard cannot be invoked", Call); Assert(Call.countOperandBundlesOfType(LLVMContext::OB_deopt) == 1, diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -34555,8 +34555,8 @@ // permilps(shufps(load(),x)) --> permilps(shufps(x,load())) static SDValue combineCommutableSHUFP(SDValue N, MVT VT, const SDLoc &DL, SelectionDAG &DAG) { - // TODO: Add vXf64 support. - if (VT != MVT::v4f32 && VT != MVT::v8f32 && VT != MVT::v16f32) + // TODO: Add general vXf32 + vXf64 support. + if (VT != MVT::v4f32) return SDValue(); // SHUFP(LHS, RHS) -> SHUFP(RHS, LHS) iff LHS is foldable + RHS is not. diff --git a/llvm/lib/Target/X86/X86ScheduleBdVer2.td b/llvm/lib/Target/X86/X86ScheduleBdVer2.td --- a/llvm/lib/Target/X86/X86ScheduleBdVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBdVer2.td @@ -545,40 +545,8 @@ def : SchedAlias; // This is for simple LEAs with one or two input operands. -def : WriteRes { let ResourceCycles = [2]; } - -// This write is used for slow LEA instructions. -def PdWrite3OpsLEA : SchedWriteRes<[PdEX01]> { - let Latency = 2; - let ResourceCycles = [2]; -} - -// On Piledriver, a slow LEA is either a 3Ops LEA (base, index, offset), -// or an LEA with a `Scale` value different than 1. -def PdSlowLEAPredicate : MCSchedPredicate< - CheckAny<[ - // A 3-operand LEA (base, index, offset). - IsThreeOperandsLEAFn, - // An LEA with a "Scale" different than 1. - CheckAll<[ - CheckIsImmOperand<2>, - CheckNot> - ]> - ]> ->; - -def PdWriteLEA : SchedWriteVariant<[ - SchedVar, - SchedVar -]>; - -def : InstRW<[PdWriteLEA], (instrs LEA32r, LEA64r, LEA64_32r)>; - -def PdWriteLEA16r : SchedWriteRes<[PdEX01]> { - let ResourceCycles = [3]; - let NumMicroOps = 2; -} -def : InstRW<[PdWriteLEA16r], (instrs LEA16r)>; +// FIXME: SAGU 3-operand LEA +def : WriteRes { let NumMicroOps = 2; } // Bit counts. defm : PdWriteResExPair; diff --git a/llvm/test/Assembler/auto_upgrade_intrinsics.ll b/llvm/test/Assembler/auto_upgrade_intrinsics.ll --- a/llvm/test/Assembler/auto_upgrade_intrinsics.ll +++ b/llvm/test/Assembler/auto_upgrade_intrinsics.ll @@ -98,7 +98,7 @@ define void @tests.masked.scatter(<2 x double*> %ptr, <2 x i1> %mask, <2 x double> %val) { ; CHECK-LABEL: @tests.masked.scatter( ; CHECK: @llvm.masked.scatter.v2f64.v2p0f64 - call void @llvm.masked.scatter.v2f64(<2 x double> %val, <2 x double*> %ptr, i32 1, <2 x i1> %mask) + call void @llvm.masked.scatter.v2f64(<2 x double> %val, <2 x double*> %ptr, i32 3, <2 x i1> %mask) ret void } diff --git a/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll b/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll --- a/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll +++ b/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll @@ -1308,14 +1308,16 @@ define <8 x float> @shuffle_mem_v8f32_8BA0CFE4(<8 x float> %a0, <8 x float>* %a1) { ; AVX1OR2-LABEL: shuffle_mem_v8f32_8BA0CFE4: ; AVX1OR2: # %bb.0: -; AVX1OR2-NEXT: vshufps {{.*#+}} ymm1 = ymm0[2,0],mem[0,0],ymm0[6,4],mem[4,4] -; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[0,2],ymm0[4,7],ymm1[4,6] +; AVX1OR2-NEXT: vmovaps (%rdi), %ymm1 +; AVX1OR2-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[2,0],ymm1[4,4],ymm0[6,4] +; AVX1OR2-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[2,0],ymm0[4,7],ymm1[6,4] ; AVX1OR2-NEXT: retq ; ; AVX512VL-SLOW-LABEL: shuffle_mem_v8f32_8BA0CFE4: ; AVX512VL-SLOW: # %bb.0: -; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm1 = ymm0[2,0],mem[0,0],ymm0[6,4],mem[4,4] -; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[0,2],ymm0[4,7],ymm1[4,6] +; AVX512VL-SLOW-NEXT: vmovaps (%rdi), %ymm1 +; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm1 = ymm1[0,0],ymm0[2,0],ymm1[4,4],ymm0[6,4] +; AVX512VL-SLOW-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,3],ymm1[2,0],ymm0[4,7],ymm1[6,4] ; AVX512VL-SLOW-NEXT: retq ; ; AVX512VL-FAST-LABEL: shuffle_mem_v8f32_8BA0CFE4: diff --git a/llvm/test/CodeGen/X86/vector-shuffle-512-v16.ll b/llvm/test/CodeGen/X86/vector-shuffle-512-v16.ll --- a/llvm/test/CodeGen/X86/vector-shuffle-512-v16.ll +++ b/llvm/test/CodeGen/X86/vector-shuffle-512-v16.ll @@ -274,8 +274,9 @@ define <16 x float> @shuffle_v16f32_load_08_11_10_00_12_15_14_04(<16 x float> %a0, <16 x float>* %a1) { ; ALL-LABEL: shuffle_v16f32_load_08_11_10_00_12_15_14_04: ; ALL: # %bb.0: -; ALL-NEXT: vshufps {{.*#+}} zmm1 = zmm0[2,0],mem[0,0],zmm0[6,4],mem[4,4],zmm0[10,8],mem[8,8],zmm0[14,12],mem[12,12] -; ALL-NEXT: vshufps {{.*#+}} zmm0 = zmm0[0,3],zmm1[0,2],zmm0[4,7],zmm1[4,6],zmm0[8,11],zmm1[8,10],zmm0[12,15],zmm1[12,14] +; ALL-NEXT: vmovaps (%rdi), %zmm1 +; ALL-NEXT: vshufps {{.*#+}} zmm1 = zmm1[0,0],zmm0[2,0],zmm1[4,4],zmm0[6,4],zmm1[8,8],zmm0[10,8],zmm1[12,12],zmm0[14,12] +; ALL-NEXT: vshufps {{.*#+}} zmm0 = zmm0[0,3],zmm1[2,0],zmm0[4,7],zmm1[6,4],zmm0[8,11],zmm1[10,8],zmm0[12,15],zmm1[14,12] ; ALL-NEXT: retq %1 = load <16 x float>, <16 x float>* %a1 %2 = shufflevector <16 x float> %1, <16 x float> %a0, <16 x i32> diff --git a/llvm/test/Transforms/InstCombine/masked_intrinsics.ll b/llvm/test/Transforms/InstCombine/masked_intrinsics.ll --- a/llvm/test/Transforms/InstCombine/masked_intrinsics.ll +++ b/llvm/test/Transforms/InstCombine/masked_intrinsics.ll @@ -258,7 +258,7 @@ ; CHECK-LABEL: @scatter_zeromask( ; CHECK-NEXT: ret void ; - call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %val, <2 x double*> %ptrs, i32 8, <2 x i1> zeroinitializer) + call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %val, <2 x double*> %ptrs, i32 6, <2 x i1> zeroinitializer) ret void } diff --git a/llvm/test/Transforms/InstCombine/shift-add.ll b/llvm/test/Transforms/InstCombine/shift-add.ll --- a/llvm/test/Transforms/InstCombine/shift-add.ll +++ b/llvm/test/Transforms/InstCombine/shift-add.ll @@ -5,7 +5,7 @@ define i32 @shl_C1_add_A_C2_i32(i16 %A) { ; CHECK-LABEL: @shl_C1_add_A_C2_i32( -; CHECK-NEXT: [[B:%.*]] = zext i16 [[A:%.*]] to i32 +; CHECK-NEXT: [[B:%.*]] = zext i16 %A to i32 ; CHECK-NEXT: [[D:%.*]] = shl i32 192, [[B]] ; CHECK-NEXT: ret i32 [[D]] ; @@ -27,7 +27,7 @@ define i32 @lshr_C1_add_A_C2_i32(i32 %A) { ; CHECK-LABEL: @lshr_C1_add_A_C2_i32( -; CHECK-NEXT: [[B:%.*]] = and i32 [[A:%.*]], 65535 +; CHECK-NEXT: [[B:%.*]] = and i32 %A, 65535 ; CHECK-NEXT: [[D:%.*]] = shl i32 192, [[B]] ; CHECK-NEXT: ret i32 [[D]] ; @@ -39,7 +39,7 @@ define <4 x i32> @shl_C1_add_A_C2_v4i32(<4 x i16> %A) { ; CHECK-LABEL: @shl_C1_add_A_C2_v4i32( -; CHECK-NEXT: [[B:%.*]] = zext <4 x i16> [[A:%.*]] to <4 x i32> +; CHECK-NEXT: [[B:%.*]] = zext <4 x i16> %A to <4 x i32> ; CHECK-NEXT: [[D:%.*]] = shl <4 x i32> , [[B]] ; CHECK-NEXT: ret <4 x i32> [[D]] ; @@ -51,7 +51,7 @@ define <4 x i32> @ashr_C1_add_A_C2_v4i32(<4 x i32> %A) { ; CHECK-LABEL: @ashr_C1_add_A_C2_v4i32( -; CHECK-NEXT: [[B:%.*]] = and <4 x i32> [[A:%.*]], +; CHECK-NEXT: [[B:%.*]] = and <4 x i32> %A, ; CHECK-NEXT: [[D:%.*]] = ashr <4 x i32> , [[B]] ; CHECK-NEXT: ret <4 x i32> [[D]] ; @@ -63,7 +63,7 @@ define <4 x i32> @lshr_C1_add_A_C2_v4i32(<4 x i32> %A) { ; CHECK-LABEL: @lshr_C1_add_A_C2_v4i32( -; CHECK-NEXT: [[B:%.*]] = and <4 x i32> [[A:%.*]], +; CHECK-NEXT: [[B:%.*]] = and <4 x i32> %A, ; CHECK-NEXT: [[D:%.*]] = lshr <4 x i32> , [[B]] ; CHECK-NEXT: ret <4 x i32> [[D]] ; @@ -72,54 +72,3 @@ %D = lshr <4 x i32> , %C ret <4 x i32> %D } - -define <4 x i32> @shl_C1_add_A_C2_v4i32_splat(i16 %I) { -; CHECK-LABEL: @shl_C1_add_A_C2_v4i32_splat( -; CHECK-NEXT: [[A:%.*]] = zext i16 [[I:%.*]] to i32 -; CHECK-NEXT: [[B:%.*]] = insertelement <4 x i32> undef, i32 [[A]], i32 0 -; CHECK-NEXT: [[C:%.*]] = shufflevector <4 x i32> [[B]], <4 x i32> undef, <4 x i32> zeroinitializer -; CHECK-NEXT: [[D:%.*]] = add <4 x i32> [[C]], -; CHECK-NEXT: [[E:%.*]] = shl <4 x i32> , [[D]] -; CHECK-NEXT: ret <4 x i32> [[E]] -; - %A = zext i16 %I to i32 - %B = insertelement <4 x i32> undef, i32 %A, i32 0 - %C = shufflevector <4 x i32> %B, <4 x i32> undef, <4 x i32> zeroinitializer - %D = add <4 x i32> %C, - %E = shl <4 x i32> , %D - ret <4 x i32> %E -} - -define <4 x i32> @ashr_C1_add_A_C2_v4i32_splat(i16 %I) { -; CHECK-LABEL: @ashr_C1_add_A_C2_v4i32_splat( -; CHECK-NEXT: [[A:%.*]] = zext i16 [[I:%.*]] to i32 -; CHECK-NEXT: [[B:%.*]] = insertelement <4 x i32> undef, i32 [[A]], i32 0 -; CHECK-NEXT: [[C:%.*]] = shufflevector <4 x i32> [[B]], <4 x i32> undef, <4 x i32> zeroinitializer -; CHECK-NEXT: [[D:%.*]] = add <4 x i32> [[C]], -; CHECK-NEXT: [[E:%.*]] = ashr <4 x i32> , [[D]] -; CHECK-NEXT: ret <4 x i32> [[E]] -; - %A = zext i16 %I to i32 - %B = insertelement <4 x i32> undef, i32 %A, i32 0 - %C = shufflevector <4 x i32> %B, <4 x i32> undef, <4 x i32> zeroinitializer - %D = add <4 x i32> %C, - %E = ashr <4 x i32> , %D - ret <4 x i32> %E -} - -define <4 x i32> @lshr_C1_add_A_C2_v4i32_splat(i16 %I) { -; CHECK-LABEL: @lshr_C1_add_A_C2_v4i32_splat( -; CHECK-NEXT: [[A:%.*]] = zext i16 [[I:%.*]] to i32 -; CHECK-NEXT: [[B:%.*]] = insertelement <4 x i32> undef, i32 [[A]], i32 0 -; CHECK-NEXT: [[C:%.*]] = shufflevector <4 x i32> [[B]], <4 x i32> undef, <4 x i32> zeroinitializer -; CHECK-NEXT: [[D:%.*]] = add <4 x i32> [[C]], -; CHECK-NEXT: [[E:%.*]] = lshr <4 x i32> , [[D]] -; CHECK-NEXT: ret <4 x i32> [[E]] -; - %A = zext i16 %I to i32 - %B = insertelement <4 x i32> undef, i32 %A, i32 0 - %C = shufflevector <4 x i32> %B, <4 x i32> undef, <4 x i32> zeroinitializer - %D = add <4 x i32> %C, - %E = lshr <4 x i32> , %D - ret <4 x i32> %E -} diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-lea.s b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-lea.s --- a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-lea.s +++ b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-lea.s @@ -148,141 +148,141 @@ # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: -# CHECK-NEXT: 2 1 1.50 leaw 0, %cx -# CHECK-NEXT: 1 1 1.00 leal 0, %ecx -# CHECK-NEXT: 1 1 1.00 leaq 0, %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%eax), %cx -# CHECK-NEXT: 1 1 1.00 leal (%eax), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (%eax), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%rax), %cx -# CHECK-NEXT: 1 1 1.00 leal (%rax), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (%rax), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal (,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal (,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal (,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal (,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (,%ebx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal (,%ebx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq (,%ebx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (,%rbx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal (,%rbx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq (,%rbx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%eax,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal (%eax,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (%eax,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%rax,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal (%rax,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (%rax,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%eax,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal (%eax,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (%eax,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%rax,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal (%rax,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq (%rax,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%eax,%ebx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal (%eax,%ebx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq (%eax,%ebx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw (%rax,%rbx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal (%rax,%rbx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq (%rax,%rbx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16, %cx -# CHECK-NEXT: 1 1 1.00 leal -16, %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16, %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%eax), %cx -# CHECK-NEXT: 1 1 1.00 leal -16(%eax), %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16(%eax), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%rax), %cx -# CHECK-NEXT: 1 1 1.00 leal -16(%rax), %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16(%rax), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal -16(,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16(,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal -16(,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16(,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal -16(,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16(,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal -16(,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq -16(,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(,%ebx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(,%ebx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(,%ebx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(,%rbx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(,%rbx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(,%rbx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%eax,%ebx), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(%eax,%ebx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(%eax,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%rax,%rbx), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(%rax,%rbx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(%rax,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%eax,%ebx), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(%eax,%ebx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(%eax,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%rax,%rbx), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(%rax,%rbx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(%rax,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%eax,%ebx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(%eax,%ebx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(%eax,%ebx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw -16(%rax,%rbx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal -16(%rax,%rbx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq -16(%rax,%rbx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024, %cx -# CHECK-NEXT: 1 1 1.00 leal 1024, %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024, %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%eax), %cx -# CHECK-NEXT: 1 1 1.00 leal 1024(%eax), %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024(%eax), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%rax), %cx -# CHECK-NEXT: 1 1 1.00 leal 1024(%rax), %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024(%rax), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal 1024(,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024(,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal 1024(,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024(,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(,%ebx), %cx -# CHECK-NEXT: 1 1 1.00 leal 1024(,%ebx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024(,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(,%rbx), %cx -# CHECK-NEXT: 1 1 1.00 leal 1024(,%rbx), %ecx -# CHECK-NEXT: 1 1 1.00 leaq 1024(,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(,%ebx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(,%ebx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(,%ebx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(,%rbx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(,%rbx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(,%rbx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%eax,%ebx), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(%eax,%ebx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(%eax,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%rax,%rbx), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(%rax,%rbx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(%rax,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%eax,%ebx), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(%eax,%ebx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(%eax,%ebx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%rax,%rbx), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(%rax,%rbx), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(%rax,%rbx), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%eax,%ebx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(%eax,%ebx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(%eax,%ebx,2), %rcx -# CHECK-NEXT: 2 1 1.50 leaw 1024(%rax,%rbx,2), %cx -# CHECK-NEXT: 1 2 1.00 leal 1024(%rax,%rbx,2), %ecx -# CHECK-NEXT: 1 2 1.00 leaq 1024(%rax,%rbx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 0, %cx +# CHECK-NEXT: 2 1 0.50 leal 0, %ecx +# CHECK-NEXT: 2 1 0.50 leaq 0, %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%eax), %cx +# CHECK-NEXT: 2 1 0.50 leal (%eax), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%eax), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%rax), %cx +# CHECK-NEXT: 2 1 0.50 leal (%rax), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%rax), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal (,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal (,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal (,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal (,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (,%ebx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal (,%ebx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (,%ebx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (,%rbx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal (,%rbx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (,%rbx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%eax,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal (%eax,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%eax,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%rax,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal (%rax,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%rax,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%eax,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal (%eax,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%eax,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%rax,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal (%rax,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%rax,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%eax,%ebx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal (%eax,%ebx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%eax,%ebx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw (%rax,%rbx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal (%rax,%rbx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq (%rax,%rbx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16, %cx +# CHECK-NEXT: 2 1 0.50 leal -16, %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16, %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%eax), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%eax), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%eax), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%rax), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%rax), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%rax), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(,%ebx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(,%ebx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(,%ebx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(,%rbx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(,%rbx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(,%rbx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%eax,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%eax,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%eax,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%rax,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%rax,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%rax,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%eax,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%eax,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%eax,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%rax,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%rax,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%rax,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%eax,%ebx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%eax,%ebx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%eax,%ebx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw -16(%rax,%rbx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal -16(%rax,%rbx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq -16(%rax,%rbx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024, %cx +# CHECK-NEXT: 2 1 0.50 leal 1024, %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024, %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%eax), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%eax), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%eax), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%rax), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%rax), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%rax), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(,%ebx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(,%ebx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(,%ebx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(,%rbx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(,%rbx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(,%rbx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%eax,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%eax,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%eax,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%rax,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%rax,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%rax,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%eax,%ebx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%eax,%ebx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%eax,%ebx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%rax,%rbx), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%rax,%rbx), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%rax,%rbx), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%eax,%ebx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%eax,%ebx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%eax,%ebx,2), %rcx +# CHECK-NEXT: 2 1 0.50 leaw 1024(%rax,%rbx,2), %cx +# CHECK-NEXT: 2 1 0.50 leal 1024(%rax,%rbx,2), %ecx +# CHECK-NEXT: 2 1 0.50 leaq 1024(%rax,%rbx,2), %rcx # CHECK: Resources: # CHECK-NEXT: [0.0] - PdAGLU01 @@ -311,142 +311,142 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] -# CHECK-NEXT: - - - - - 157.50 157.50 - - - - - - - - - - - - - - - - +# CHECK-NEXT: - - - - - 67.50 67.50 - - - - - - - - - - - - - - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] Instructions: -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 0, %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 0, %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 0, %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%eax), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%eax), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%eax), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%rax), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%rax), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%rax), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (,%ebx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (,%ebx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (,%ebx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (,%rbx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (,%rbx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (,%rbx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%eax,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%eax,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%eax,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%rax,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%rax,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%rax,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%eax,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%eax,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%eax,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%rax,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%rax,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%rax,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%eax,%ebx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%eax,%ebx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%eax,%ebx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw (%rax,%rbx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal (%rax,%rbx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq (%rax,%rbx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16, %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16, %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16, %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%eax), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%eax), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%eax), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%rax), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%rax), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%rax), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(,%ebx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(,%ebx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(,%ebx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(,%rbx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(,%rbx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(,%rbx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%eax,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%eax,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%eax,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%rax,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%rax,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%rax,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%eax,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%eax,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%eax,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%rax,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%rax,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%rax,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%eax,%ebx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%eax,%ebx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%eax,%ebx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw -16(%rax,%rbx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal -16(%rax,%rbx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq -16(%rax,%rbx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024, %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024, %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024, %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%eax), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%eax), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%eax), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%rax), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%rax), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%rax), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(,%ebx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(,%ebx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(,%ebx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(,%rbx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(,%rbx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(,%rbx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%eax,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%eax,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%eax,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%rax,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%rax,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%rax,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%eax,%ebx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%eax,%ebx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%eax,%ebx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%rax,%rbx), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%rax,%rbx), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%rax,%rbx), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%eax,%ebx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%eax,%ebx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%eax,%ebx,2), %rcx -# CHECK-NEXT: - - - - - 1.50 1.50 - - - - - - - - - - - - - - - - leaw 1024(%rax,%rbx,2), %cx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leal 1024(%rax,%rbx,2), %ecx -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 1024(%rax,%rbx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 0, %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 0, %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 0, %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%eax), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%eax), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%eax), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%rax), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%rax), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%rax), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (,%ebx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (,%ebx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (,%ebx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (,%rbx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (,%rbx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (,%rbx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%eax,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%eax,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%eax,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%rax,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%rax,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%rax,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%eax,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%eax,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%eax,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%rax,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%rax,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%rax,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%eax,%ebx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%eax,%ebx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%eax,%ebx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw (%rax,%rbx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal (%rax,%rbx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq (%rax,%rbx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16, %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16, %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16, %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%eax), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%eax), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%eax), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%rax), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%rax), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%rax), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(,%ebx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(,%ebx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(,%ebx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(,%rbx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(,%rbx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(,%rbx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%eax,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%eax,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%eax,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%rax,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%rax,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%rax,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%eax,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%eax,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%eax,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%rax,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%rax,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%rax,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%eax,%ebx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%eax,%ebx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%eax,%ebx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw -16(%rax,%rbx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal -16(%rax,%rbx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq -16(%rax,%rbx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024, %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024, %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024, %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%eax), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%eax), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%eax), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%rax), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%rax), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%rax), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(,%ebx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(,%ebx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(,%ebx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(,%rbx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(,%rbx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(,%rbx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%eax,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%eax,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%eax,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%rax,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%rax,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%rax,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%eax,%ebx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%eax,%ebx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%eax,%ebx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%rax,%rbx), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%rax,%rbx), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%rax,%rbx), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%eax,%ebx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%eax,%ebx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%eax,%ebx,2), %rcx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaw 1024(%rax,%rbx,2), %cx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leal 1024(%rax,%rbx,2), %ecx +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 1024(%rax,%rbx,2), %rcx diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/vbroadcast-operand-latency.s b/llvm/test/tools/llvm-mca/X86/BdVer2/vbroadcast-operand-latency.s --- a/llvm/test/tools/llvm-mca/X86/BdVer2/vbroadcast-operand-latency.s +++ b/llvm/test/tools/llvm-mca/X86/BdVer2/vbroadcast-operand-latency.s @@ -7,10 +7,10 @@ # CHECK: Iterations: 100 # CHECK-NEXT: Instructions: 200 # CHECK-NEXT: Total Cycles: 206 -# CHECK-NEXT: Total uOps: 300 +# CHECK-NEXT: Total uOps: 400 # CHECK: Dispatch Width: 4 -# CHECK-NEXT: uOps Per Cycle: 1.46 +# CHECK-NEXT: uOps Per Cycle: 1.94 # CHECK-NEXT: IPC: 0.97 # CHECK-NEXT: Block RThroughput: 2.0 @@ -23,7 +23,7 @@ # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: -# CHECK-NEXT: 1 2 1.00 leaq 8(%rsp,%rdi,2), %rax +# CHECK-NEXT: 2 1 0.50 leaq 8(%rsp,%rdi,2), %rax # CHECK-NEXT: 2 6 2.00 * vbroadcastss (%rax), %ymm0 # CHECK: Resources: @@ -53,22 +53,22 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] -# CHECK-NEXT: 0.50 0.50 - - - 1.00 1.00 - 2.00 2.00 - - - - 1.00 1.00 - - - 0.50 0.50 - - +# CHECK-NEXT: 0.50 0.50 - - - 0.50 0.50 - 2.00 2.00 - - - - 1.00 1.00 - - - 0.50 0.50 - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] Instructions: -# CHECK-NEXT: - - - - - 1.00 1.00 - - - - - - - - - - - - - - - - leaq 8(%rsp,%rdi,2), %rax +# CHECK-NEXT: - - - - - 0.50 0.50 - - - - - - - - - - - - - - - - leaq 8(%rsp,%rdi,2), %rax # CHECK-NEXT: 0.50 0.50 - - - - - - 2.00 2.00 - - - - 1.00 1.00 - - - 0.50 0.50 - - vbroadcastss (%rax), %ymm0 # CHECK: Timeline view: # CHECK-NEXT: 012 # CHECK-NEXT: Index 0123456789 -# CHECK: [0,0] DeeER. . . leaq 8(%rsp,%rdi,2), %rax +# CHECK: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax # CHECK-NEXT: [0,1] DeeeeeeER . . vbroadcastss (%rax), %ymm0 -# CHECK-NEXT: [1,0] DeeE----R . . leaq 8(%rsp,%rdi,2), %rax +# CHECK-NEXT: [1,0] .DeE----R . . leaq 8(%rsp,%rdi,2), %rax # CHECK-NEXT: [1,1] .DeeeeeeER. . vbroadcastss (%rax), %ymm0 -# CHECK-NEXT: [2,0] .D=eeE---R. . leaq 8(%rsp,%rdi,2), %rax +# CHECK-NEXT: [2,0] . DeE----R. . leaq 8(%rsp,%rdi,2), %rax # CHECK-NEXT: [2,1] . D==eeeeeeER vbroadcastss (%rax), %ymm0 # CHECK: Average Wait times (based on the timeline view): @@ -78,6 +78,6 @@ # CHECK-NEXT: [3]: Average time elapsed from WB until retire stage # CHECK: [0] [1] [2] [3] -# CHECK-NEXT: 0. 3 1.3 1.3 2.3 leaq 8(%rsp,%rdi,2), %rax -# CHECK-NEXT: 1. 3 1.7 1.0 0.0 vbroadcastss (%rax), %ymm0 -# CHECK-NEXT: 3 1.5 1.2 1.2 +# CHECK-NEXT: 0. 3 1.0 1.0 2.7 leaq 8(%rsp,%rdi,2), %rax +# CHECK-NEXT: 1. 3 1.7 0.7 0.0 vbroadcastss (%rax), %ymm0 +# CHECK-NEXT: 3 1.3 0.8 1.3 diff --git a/llvm/test/tools/llvm-mca/X86/Generic/resources-clzero.s b/llvm/test/tools/llvm-mca/X86/Generic/resources-clzero.s --- a/llvm/test/tools/llvm-mca/X86/Generic/resources-clzero.s +++ b/llvm/test/tools/llvm-mca/X86/Generic/resources-clzero.s @@ -12,7 +12,7 @@ # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: -# CHECK-NEXT: 1 5 0.50 U clzero +# CHECK-NEXT: 1 5 0.50 U clzero # CHECK: Resources: # CHECK-NEXT: [0] - SBDivider @@ -30,4 +30,4 @@ # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions: -# CHECK-NEXT: - - - - - - 0.50 0.50 clzero +# CHECK-NEXT: - - - - - - 0.50 0.50 clzero diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-clzero.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-clzero.s --- a/llvm/test/tools/llvm-mca/X86/Znver1/resources-clzero.s +++ b/llvm/test/tools/llvm-mca/X86/Znver1/resources-clzero.s @@ -12,7 +12,7 @@ # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: -# CHECK-NEXT: 1 8 0.50 U clzero +# CHECK-NEXT: 1 8 0.50 U clzero # CHECK: Resources: # CHECK-NEXT: [0] - ZnAGU0 @@ -30,7 +30,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] -# CHECK-NEXT: 0.50 0.50 - - - - - - - - - - +# CHECK-NEXT: 0.50 0.50 - - - - - - - - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions: diff --git a/llvm/test/tools/llvm-mca/X86/bextr-read-after-ld.s b/llvm/test/tools/llvm-mca/X86/bextr-read-after-ld.s --- a/llvm/test/tools/llvm-mca/X86/bextr-read-after-ld.s +++ b/llvm/test/tools/llvm-mca/X86/bextr-read-after-ld.s @@ -64,11 +64,6 @@ # ZNVER1-NEXT: IPC: 0.25 # ZNVER1-NEXT: Block RThroughput: 0.8 -# ZNVER2: Dispatch Width: 4 -# ZNVER2-NEXT: uOps Per Cycle: 0.38 -# ZNVER2-NEXT: IPC: 0.25 -# ZNVER2-NEXT: Block RThroughput: 0.8 - # ALL: Instruction Info: # ALL-NEXT: [1]: #uOps # ALL-NEXT: [2]: Latency @@ -97,9 +92,6 @@ # ZNVER1-NEXT: 1 1 0.25 addl %edi, %esi # ZNVER1-NEXT: 2 5 0.50 * bextrl %esi, (%rdi), %eax -# ZNVER2-NEXT: 1 1 0.25 addl %edi, %esi -# ZNVER2-NEXT: 2 5 0.33 * bextrl %esi, (%rdi), %eax - # ALL: Timeline view: # BDVER2-NEXT: Index 012345678 @@ -108,7 +100,6 @@ # HASWELL-NEXT: Index 0123456789 # SKYLAKE-NEXT: Index 0123456789 # ZNVER1-NEXT: Index 01234567 -# ZNVER2-NEXT: Index 01234567 # BDVER2: [0,0] DeER . . addl %edi, %esi # BDVER2-NEXT: [0,1] DeeeeeeER bextrl %esi, (%rdi), %eax @@ -128,9 +119,6 @@ # ZNVER1: [0,0] DeER . . addl %edi, %esi # ZNVER1-NEXT: [0,1] DeeeeeER bextrl %esi, (%rdi), %eax -# ZNVER2: [0,0] DeER . . addl %edi, %esi -# ZNVER2-NEXT: [0,1] DeeeeeER bextrl %esi, (%rdi), %eax - # ALL: Average Wait times (based on the timeline view): # ALL-NEXT: [0]: Executions # ALL-NEXT: [1]: Average time spent waiting in a scheduler's queue diff --git a/llvm/test/tools/llvm-mca/X86/bzhi-read-after-ld.s b/llvm/test/tools/llvm-mca/X86/bzhi-read-after-ld.s --- a/llvm/test/tools/llvm-mca/X86/bzhi-read-after-ld.s +++ b/llvm/test/tools/llvm-mca/X86/bzhi-read-after-ld.s @@ -39,11 +39,6 @@ # ZNVER1-NEXT: IPC: 0.25 # ZNVER1-NEXT: Block RThroughput: 0.8 -# ZNVER2: Dispatch Width: 4 -# ZNVER2-NEXT: uOps Per Cycle: 0.38 -# ZNVER2-NEXT: IPC: 0.25 -# ZNVER2-NEXT: Block RThroughput: 0.8 - # ALL: Instruction Info: # ALL-NEXT: [1]: #uOps # ALL-NEXT: [2]: Latency @@ -59,7 +54,6 @@ # HASWELL-NEXT: 2 6 0.50 * bzhil %esi, (%rdi), %eax # SKYLAKE-NEXT: 2 6 0.50 * bzhil %esi, (%rdi), %eax # ZNVER1-NEXT: 2 5 0.50 * bzhil %esi, (%rdi), %eax -# ZNVER2-NEXT: 2 5 0.33 * bzhil %esi, (%rdi), %eax # ALL: Timeline view: @@ -67,7 +61,6 @@ # HASWELL-NEXT: Index 012345678 # SKYLAKE-NEXT: Index 012345678 # ZNVER1-NEXT: Index 01234567 -# ZNVER2-NEXT: Index 01234567 # BDWELL: [0,0] DeER . . addl %edi, %esi # BDWELL-NEXT: [0,1] DeeeeeeER bzhil %esi, (%rdi), %eax @@ -81,9 +74,6 @@ # ZNVER1: [0,0] DeER . . addl %edi, %esi # ZNVER1-NEXT: [0,1] DeeeeeER bzhil %esi, (%rdi), %eax -# ZNVER2: [0,0] DeER . . addl %edi, %esi -# ZNVER2-NEXT: [0,1] DeeeeeER bzhil %esi, (%rdi), %eax - # ALL: Average Wait times (based on the timeline view): # ALL-NEXT: [0]: Executions # ALL-NEXT: [1]: Average time spent waiting in a scheduler's queue diff --git a/llvm/test/tools/llvm-mca/X86/read-after-ld-1.s b/llvm/test/tools/llvm-mca/X86/read-after-ld-1.s --- a/llvm/test/tools/llvm-mca/X86/read-after-ld-1.s +++ b/llvm/test/tools/llvm-mca/X86/read-after-ld-1.s @@ -114,7 +114,7 @@ # ZNVER1-NEXT: Index 0123456789 # ZNVER2-NEXT: 0123456789 -# ZNVER2-NEXT: Index 0123456789 0 +# ZNVER2-NEXT: Index 0123456789 # BARCELONA: [0,0] DeeeeeeeeeeeeeeER . vdivps %xmm0, %xmm1, %xmm1 # BARCELONA-NEXT: [0,1] D========eeeeeeeeeER vaddps (%rax), %xmm1, %xmm1 @@ -140,7 +140,7 @@ # ZNVER1: [0,0] DeeeeeeeeeeeeeeeER . vdivps %xmm0, %xmm1, %xmm1 # ZNVER1-NEXT: [0,1] D=======eeeeeeeeeeER vaddps (%rax), %xmm1, %xmm1 -# ZNVER2: [0,0] DeeeeeeeeeeeeeeeER . vdivps %xmm0, %xmm1, %xmm1 +# ZNVER2: [0,0] DeeeeeeeeeeeeeeeER . vdivps %xmm0, %xmm1, %xmm1 # ZNVER2-NEXT: [0,1] D========eeeeeeeeeeER vaddps (%rax), %xmm1, %xmm1 # ALL: Average Wait times (based on the timeline view): diff --git a/llvm/test/tools/llvm-mca/X86/read-after-ld-2.s b/llvm/test/tools/llvm-mca/X86/read-after-ld-2.s --- a/llvm/test/tools/llvm-mca/X86/read-after-ld-2.s +++ b/llvm/test/tools/llvm-mca/X86/read-after-ld-2.s @@ -31,9 +31,6 @@ # ZNVER1-NEXT: Total Cycles: 110 # ZNVER1-NEXT: Total uOps: 400 -# ZNVER2-NEXT: Total Cycles: 110 -# ZNVER2-NEXT: Total uOps: 400 - # BDWELL: Dispatch Width: 4 # BDWELL-NEXT: uOps Per Cycle: 3.52 # BDWELL-NEXT: IPC: 2.82 @@ -240,46 +237,46 @@ # ZNVER1-NEXT: [9,2] . . DeE-------R addq $32, %r8 # ZNVER1-NEXT: [9,3] . . D=eE------R cmpl %edi, %edx -# ZNVER2: [0,0] DeER . . . . addl $1, %edx -# ZNVER2-NEXT: [0,1] DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [0,2] DeE-------R . . addq $32, %r8 -# ZNVER2-NEXT: [0,3] D=eE------R . . cmpl %edi, %edx -# ZNVER2-NEXT: [1,0] .DeE------R . . addl $1, %edx -# ZNVER2-NEXT: [1,1] .DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [1,2] .DeE-------R . . addq $32, %r8 -# ZNVER2-NEXT: [1,3] .D=eE------R . . cmpl %edi, %edx -# ZNVER2-NEXT: [2,0] . DeE------R . . addl $1, %edx -# ZNVER2-NEXT: [2,1] . DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [2,2] . DeE-------R . . addq $32, %r8 -# ZNVER2-NEXT: [2,3] . D=eE------R . . cmpl %edi, %edx -# ZNVER2-NEXT: [3,0] . DeE------R . . addl $1, %edx -# ZNVER2-NEXT: [3,1] . DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [3,2] . DeE-------R . . addq $32, %r8 -# ZNVER2-NEXT: [3,3] . D=eE------R . . cmpl %edi, %edx -# ZNVER2-NEXT: [4,0] . DeE------R . . addl $1, %edx -# ZNVER2-NEXT: [4,1] . DeeeeeeeeER. . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [4,2] . DeE-------R. . addq $32, %r8 -# ZNVER2-NEXT: [4,3] . D=eE------R. . cmpl %edi, %edx -# ZNVER2-NEXT: [5,0] . DeE------R. . addl $1, %edx -# ZNVER2-NEXT: [5,1] . DeeeeeeeeER . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [5,2] . DeE-------R . addq $32, %r8 -# ZNVER2-NEXT: [5,3] . D=eE------R . cmpl %edi, %edx -# ZNVER2-NEXT: [6,0] . .DeE------R . addl $1, %edx -# ZNVER2-NEXT: [6,1] . .DeeeeeeeeER . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [6,2] . .DeE-------R . addq $32, %r8 -# ZNVER2-NEXT: [6,3] . .D=eE------R . cmpl %edi, %edx -# ZNVER2-NEXT: [7,0] . . DeE------R . addl $1, %edx -# ZNVER2-NEXT: [7,1] . . DeeeeeeeeER . vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [7,2] . . DeE-------R . addq $32, %r8 -# ZNVER2-NEXT: [7,3] . . D=eE------R . cmpl %edi, %edx -# ZNVER2-NEXT: [8,0] . . DeE------R . addl $1, %edx -# ZNVER2-NEXT: [8,1] . . DeeeeeeeeER. vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [8,2] . . DeE-------R. addq $32, %r8 -# ZNVER2-NEXT: [8,3] . . D=eE------R. cmpl %edi, %edx -# ZNVER2-NEXT: [9,0] . . DeE------R. addl $1, %edx -# ZNVER2-NEXT: [9,1] . . DeeeeeeeeER vpaddd (%r8), %ymm0, %ymm0 -# ZNVER2-NEXT: [9,2] . . DeE-------R addq $32, %r8 -# ZNVER2-NEXT: [9,3] . . D=eE------R cmpl %edi, %edx +# ZNVER2: [0,0] DeER . . . . addl $1, %edx +# ZNVER2-NEXT: [0,1] DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [0,2] DeE-------R . . addq $32, %r8 +# ZNVER2-NEXT: [0,3] D=eE------R . . cmpl %edi, %edx +# ZNVER2-NEXT: [1,0] .DeE------R . . addl $1, %edx +# ZNVER2-NEXT: [1,1] .DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [1,2] .DeE-------R . . addq $32, %r8 +# ZNVER2-NEXT: [1,3] .D=eE------R . . cmpl %edi, %edx +# ZNVER2-NEXT: [2,0] . DeE------R . . addl $1, %edx +# ZNVER2-NEXT: [2,1] . DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [2,2] . DeE-------R . . addq $32, %r8 +# ZNVER2-NEXT: [2,3] . D=eE------R . . cmpl %edi, %edx +# ZNVER2-NEXT: [3,0] . DeE------R . . addl $1, %edx +# ZNVER2-NEXT: [3,1] . DeeeeeeeeER . . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [3,2] . DeE-------R . . addq $32, %r8 +# ZNVER2-NEXT: [3,3] . D=eE------R . . cmpl %edi, %edx +# ZNVER2-NEXT: [4,0] . DeE------R . . addl $1, %edx +# ZNVER2-NEXT: [4,1] . DeeeeeeeeER. . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [4,2] . DeE-------R. . addq $32, %r8 +# ZNVER2-NEXT: [4,3] . D=eE------R. . cmpl %edi, %edx +# ZNVER2-NEXT: [5,0] . DeE------R. . addl $1, %edx +# ZNVER2-NEXT: [5,1] . DeeeeeeeeER . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [5,2] . DeE-------R . addq $32, %r8 +# ZNVER2-NEXT: [5,3] . D=eE------R . cmpl %edi, %edx +# ZNVER2-NEXT: [6,0] . .DeE------R . addl $1, %edx +# ZNVER2-NEXT: [6,1] . .DeeeeeeeeER . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [6,2] . .DeE-------R . addq $32, %r8 +# ZNVER2-NEXT: [6,3] . .D=eE------R . cmpl %edi, %edx +# ZNVER2-NEXT: [7,0] . . DeE------R . addl $1, %edx +# ZNVER2-NEXT: [7,1] . . DeeeeeeeeER . vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [7,2] . . DeE-------R . addq $32, %r8 +# ZNVER2-NEXT: [7,3] . . D=eE------R . cmpl %edi, %edx +# ZNVER2-NEXT: [8,0] . . DeE------R . addl $1, %edx +# ZNVER2-NEXT: [8,1] . . DeeeeeeeeER. vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [8,2] . . DeE-------R. addq $32, %r8 +# ZNVER2-NEXT: [8,3] . . D=eE------R. cmpl %edi, %edx +# ZNVER2-NEXT: [9,0] . . DeE------R. addl $1, %edx +# ZNVER2-NEXT: [9,1] . . DeeeeeeeeER vpaddd (%r8), %ymm0, %ymm0 +# ZNVER2-NEXT: [9,2] . . DeE-------R addq $32, %r8 +# ZNVER2-NEXT: [9,3] . . D=eE------R cmpl %edi, %edx # ALL: Average Wait times (based on the timeline view): # ALL-NEXT: [0]: Executions diff --git a/llvm/test/tools/llvm-mca/X86/scheduler-queue-usage.s b/llvm/test/tools/llvm-mca/X86/scheduler-queue-usage.s --- a/llvm/test/tools/llvm-mca/X86/scheduler-queue-usage.s +++ b/llvm/test/tools/llvm-mca/X86/scheduler-queue-usage.s @@ -89,7 +89,7 @@ # ZNVER1-NEXT: [3] Maximum number of used buffer entries. # ZNVER1-NEXT: [4] Total number of buffer entries. -# ZNVER2: Scheduler's queue usage: +# ZNVER2: Scheduler's queue usage: # ZNVER2-NEXT: [1] Resource name. # ZNVER2-NEXT: [2] Average number of used buffer entries. # ZNVER2-NEXT: [3] Maximum number of used buffer entries. @@ -134,8 +134,3 @@ # ZNVER1-NEXT: ZnAGU 0 0 28 # ZNVER1-NEXT: ZnALU 0 1 56 # ZNVER1-NEXT: ZnFPU 0 0 36 - -# ZNVER2: [1] [2] [3] [4] -# ZNVER2-NEXT: Zn2AGU 0 0 28 -# ZNVER2-NEXT: Zn2ALU 0 1 64 -# ZNVER2-NEXT: Zn2FPU 0 0 36 diff --git a/llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s b/llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s --- a/llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s +++ b/llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s @@ -35,7 +35,7 @@ # BARCELONA-NEXT: 0123456789 # BARCELONA-NEXT: Index 0123456789 0123 -# BDVER2-NEXT: 012345678 +# BDVER2-NEXT: 01234567 # BDVER2-NEXT: Index 0123456789 # BROADWELL-NEXT: 0123456789 @@ -59,8 +59,8 @@ # BARCELONA: [0,0] DeER . . . . . leaq 8(%rsp,%rdi,2), %rax # BARCELONA-NEXT: [0,1] D=eeeeeeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1 -# BDVER2: [0,0] DeeER. . . . leaq 8(%rsp,%rdi,2), %rax -# BDVER2-NEXT: [0,1] D==eeeeeeeeeeeeeeER sqrtss (%rax), %xmm1 +# BDVER2: [0,0] DeER . . . . leaq 8(%rsp,%rdi,2), %rax +# BDVER2-NEXT: [0,1] D=eeeeeeeeeeeeeeER sqrtss (%rax), %xmm1 # BROADWELL: [0,0] DeER . . . . leaq 8(%rsp,%rdi,2), %rax # BROADWELL-NEXT: [0,1] D=eeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1 @@ -92,8 +92,8 @@ # BARCELONA-NEXT: 1. 1 2.0 0.0 0.0 sqrtss (%rax), %xmm1 # BARCELONA-NEXT: 1 1.5 0.5 0.0 -# BDVER2-NEXT: 1. 1 3.0 0.0 0.0 sqrtss (%rax), %xmm1 -# BDVER2-NEXT: 1 2.0 0.5 0.0 +# BDVER2-NEXT: 1. 1 2.0 0.0 0.0 sqrtss (%rax), %xmm1 +# BDVER2-NEXT: 1 1.5 0.5 0.0 # BROADWELL-NEXT: 1. 1 2.0 0.0 0.0 sqrtss (%rax), %xmm1 # BROADWELL-NEXT: 1 1.5 0.5 0.0 @@ -120,7 +120,7 @@ # BARCELONA-NEXT: 0123456789 0 # BARCELONA-NEXT: Index 0123456789 0123456789 -# BDVER2-NEXT: 012345678 +# BDVER2-NEXT: 01234567 # BDVER2-NEXT: Index 0123456789 # BROADWELL-NEXT: 0123456789 @@ -144,8 +144,8 @@ # BARCELONA: [0,0] DeER . . . . . . leaq 8(%rsp,%rdi,2), %rax # BARCELONA-NEXT: [0,1] D=eeeeeeeeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1 -# BDVER2: [0,0] DeeER. . . . leaq 8(%rsp,%rdi,2), %rax -# BDVER2-NEXT: [0,1] D==eeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1 +# BDVER2: [0,0] DeER . . . . leaq 8(%rsp,%rdi,2), %rax +# BDVER2-NEXT: [0,1] D=eeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1 # BROADWELL: [0,0] DeER . . . . . leaq 8(%rsp,%rdi,2), %rax # BROADWELL-NEXT: [0,1] D=eeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1 @@ -177,8 +177,8 @@ # BARCELONA-NEXT: 1. 1 2.0 0.0 0.0 sqrtsd (%rax), %xmm1 # BARCELONA-NEXT: 1 1.5 0.5 0.0 -# BDVER2-NEXT: 1. 1 3.0 0.0 0.0 sqrtsd (%rax), %xmm1 -# BDVER2-NEXT: 1 2.0 0.5 0.0 +# BDVER2-NEXT: 1. 1 2.0 0.0 0.0 sqrtsd (%rax), %xmm1 +# BDVER2-NEXT: 1 1.5 0.5 0.0 # BROADWELL-NEXT: 1. 1 2.0 0.0 0.0 sqrtsd (%rax), %xmm1 # BROADWELL-NEXT: 1 1.5 0.5 0.0 @@ -203,7 +203,7 @@ # ALL: Timeline view: # BARCELONA-NEXT: 01234 -# BDVER2-NEXT: 01234 +# BDVER2-NEXT: 0123 # BROADWELL-NEXT: 0123 # BTVER2-NEXT: 01 # HASWELL-NEXT: 0123 @@ -216,8 +216,8 @@ # BARCELONA: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax # BARCELONA-NEXT: [0,1] D=eeeeeeeeeeeER rsqrtss (%rax), %xmm1 -# BDVER2: [0,0] DeeER. . . leaq 8(%rsp,%rdi,2), %rax -# BDVER2-NEXT: [0,1] D==eeeeeeeeeeER rsqrtss (%rax), %xmm1 +# BDVER2: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax +# BDVER2-NEXT: [0,1] D=eeeeeeeeeeER rsqrtss (%rax), %xmm1 # BROADWELL: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax # BROADWELL-NEXT: [0,1] D=eeeeeeeeeeER rsqrtss (%rax), %xmm1 @@ -249,8 +249,8 @@ # BARCELONA-NEXT: 1. 1 2.0 0.0 0.0 rsqrtss (%rax), %xmm1 # BARCELONA-NEXT: 1 1.5 0.5 0.0 -# BDVER2-NEXT: 1. 1 3.0 0.0 0.0 rsqrtss (%rax), %xmm1 -# BDVER2-NEXT: 1 2.0 0.5 0.0 +# BDVER2-NEXT: 1. 1 2.0 0.0 0.0 rsqrtss (%rax), %xmm1 +# BDVER2-NEXT: 1 1.5 0.5 0.0 # BROADWELL-NEXT: 1. 1 2.0 0.0 0.0 rsqrtss (%rax), %xmm1 # BROADWELL-NEXT: 1 1.5 0.5 0.0 @@ -275,7 +275,7 @@ # ALL: Timeline view: # BARCELONA-NEXT: 01234 -# BDVER2-NEXT: 01234 +# BDVER2-NEXT: 0123 # BROADWELL-NEXT: 0123 # BTVER2-NEXT: 01 # HASWELL-NEXT: 0123 @@ -288,8 +288,8 @@ # BARCELONA: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax # BARCELONA-NEXT: [0,1] D=eeeeeeeeeeeER rcpss (%rax), %xmm1 -# BDVER2: [0,0] DeeER. . . leaq 8(%rsp,%rdi,2), %rax -# BDVER2-NEXT: [0,1] D==eeeeeeeeeeER rcpss (%rax), %xmm1 +# BDVER2: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax +# BDVER2-NEXT: [0,1] D=eeeeeeeeeeER rcpss (%rax), %xmm1 # BROADWELL: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax # BROADWELL-NEXT: [0,1] D=eeeeeeeeeeER rcpss (%rax), %xmm1 @@ -321,8 +321,8 @@ # BARCELONA-NEXT: 1. 1 2.0 0.0 0.0 rcpss (%rax), %xmm1 # BARCELONA-NEXT: 1 1.5 0.5 0.0 -# BDVER2-NEXT: 1. 1 3.0 0.0 0.0 rcpss (%rax), %xmm1 -# BDVER2-NEXT: 1 2.0 0.5 0.0 +# BDVER2-NEXT: 1. 1 2.0 0.0 0.0 rcpss (%rax), %xmm1 +# BDVER2-NEXT: 1 1.5 0.5 0.0 # BROADWELL-NEXT: 1. 1 2.0 0.0 0.0 rcpss (%rax), %xmm1 # BROADWELL-NEXT: 1 1.5 0.5 0.0 diff --git a/llvm/test/tools/llvm-mca/X86/variable-blend-read-after-ld-2.s b/llvm/test/tools/llvm-mca/X86/variable-blend-read-after-ld-2.s --- a/llvm/test/tools/llvm-mca/X86/variable-blend-read-after-ld-2.s +++ b/llvm/test/tools/llvm-mca/X86/variable-blend-read-after-ld-2.s @@ -191,3 +191,4 @@ # ZNVER2-NEXT: 1. 1 1.0 0.0 0.0 vblendvps %xmm1, (%rdi), %xmm2, %xmm3 # ZNVER2-NEXT: 1 1.0 0.5 0.0 +