From b6022aa8d900d175da00a5ca7b948a27ec61f4bf Mon Sep 17 00:00:00 2001 From: Andrea Di Biagio Date: Thu, 19 Jul 2018 16:42:15 +0000 Subject: [PATCH] [X86][BtVer2] correctly model the latency/throughput of LEA instructions. This patch fixes the latency/throughput of LEA instructions in the BtVer2 scheduling model. On Jaguar, A 3-operands LEA has a latency of 2cy, and a reciprocal throughput of 1. That is because it uses one cycle of SAGU followed by 1cy of ALU1. An LEA with a "Scale" operand is also slow, and it has the same latency profile as the 3-operands LEA. An LEA16r has a latency of 3cy, and a throughput of 0.5 (i.e. RThrouhgput of 2.0). This patch adds a new TIIPredicate named IsThreeOperandsLEAFn to X86Schedule.td. The tablegen backend (for instruction-info) expands that definition into this (file X86GenInstrInfo.inc): ``` static bool isThreeOperandsLEA(const MachineInstr &MI) { return ( ( MI.getOpcode() == X86::LEA32r || MI.getOpcode() == X86::LEA64r || MI.getOpcode() == X86::LEA64_32r || MI.getOpcode() == X86::LEA16r ) && MI.getOperand(1).isReg() && MI.getOperand(1).getReg() != 0 && MI.getOperand(3).isReg() && MI.getOperand(3).getReg() != 0 && ( ( MI.getOperand(4).isImm() && MI.getOperand(4).getImm() != 0 ) || (MI.getOperand(4).isGlobal()) ) ); } ``` A similar method is generated in the X86_MC namespace, and included into X86MCTargetDesc.cpp (the declaration lives in X86MCTargetDesc.h). Back to the BtVer2 scheduling model: A new scheduling predicate named JSlowLEAPredicate now checks if either the instruction is a three-operands LEA, or it is an LEA with a Scale value different than 1. A variant scheduling class uses that new predicate to correctly select the appropriate latency profile. Differential Revision: https://reviews.llvm.org/D49436 llvm-svn: 337469 --- .../Target/X86/MCTargetDesc/X86MCTargetDesc.cpp | 1 + llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h | 1 + llvm/lib/Target/X86/X86.td | 1 + llvm/lib/Target/X86/X86FixupLEAs.cpp | 11 +- llvm/lib/Target/X86/X86SchedPredicates.td | 49 +++ llvm/lib/Target/X86/X86Schedule.td | 5 - llvm/lib/Target/X86/X86ScheduleBtVer2.td | 35 ++- llvm/test/CodeGen/X86/lea32-schedule.ll | 16 +- llvm/test/CodeGen/X86/lea64-schedule.ll | 16 +- llvm/test/CodeGen/X86/mul-constant-i32.ll | 90 +++--- llvm/test/CodeGen/X86/mul-constant-i64.ll | 90 +++--- llvm/test/CodeGen/X86/schedule-x86-64-shld.ll | 2 +- .../test/tools/llvm-mca/X86/BtVer2/resources-lea.s | 342 ++++++++++----------- 13 files changed, 367 insertions(+), 292 deletions(-) create mode 100644 llvm/lib/Target/X86/X86SchedPredicates.td diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp index a9d3af3..d030f26 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp @@ -39,6 +39,7 @@ using namespace llvm; #include "X86GenRegisterInfo.inc" #define GET_INSTRINFO_MC_DESC +#define GET_GENINSTRINFO_MC_HELPERS #include "X86GenInstrInfo.inc" #define GET_SUBTARGETINFO_MC_DESC diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h index 300a74b..595c26d 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h @@ -134,6 +134,7 @@ unsigned getX86SubSuperRegisterOrZero(unsigned, unsigned, // Defines symbolic names for the X86 instructions. // #define GET_INSTRINFO_ENUM +#define GET_GENINSTRINFO_MC_DECL #include "X86GenInstrInfo.inc" #define GET_SUBTARGETINFO_ENUM diff --git a/llvm/lib/Target/X86/X86.td b/llvm/lib/Target/X86/X86.td index d92fd67..63c2dc4 100644 --- a/llvm/lib/Target/X86/X86.td +++ b/llvm/lib/Target/X86/X86.td @@ -402,6 +402,7 @@ include "X86RegisterBanks.td" include "X86Schedule.td" include "X86InstrInfo.td" +include "X86SchedPredicates.td" def X86InstrInfo : InstrInfo; diff --git a/llvm/lib/Target/X86/X86FixupLEAs.cpp b/llvm/lib/Target/X86/X86FixupLEAs.cpp index 157b07d..d85389a 100644 --- a/llvm/lib/Target/X86/X86FixupLEAs.cpp +++ b/llvm/lib/Target/X86/X86FixupLEAs.cpp @@ -286,6 +286,8 @@ static inline bool isRegOperand(const MachineOperand &Op) { } /// hasIneffecientLEARegs - LEA that uses base and index registers /// where the base is EBP, RBP, or R13 +// TODO: use a variant scheduling class to model the latency profile +// of LEA instructions, and implement this logic as a scheduling predicate. static inline bool hasInefficientLEABaseReg(const MachineOperand &Base, const MachineOperand &Index) { return Base.isReg() && isInefficientLEAReg(Base.getReg()) && @@ -296,13 +298,6 @@ static inline bool hasLEAOffset(const MachineOperand &Offset) { return (Offset.isImm() && Offset.getImm() != 0) || Offset.isGlobal(); } -// LEA instruction that has all three operands: offset, base and index -static inline bool isThreeOperandsLEA(const MachineOperand &Base, - const MachineOperand &Index, - const MachineOperand &Offset) { - return isRegOperand(Base) && isRegOperand(Index) && hasLEAOffset(Offset); -} - static inline int getADDrrFromLEA(int LEAOpcode) { switch (LEAOpcode) { default: @@ -477,7 +472,7 @@ FixupLEAPass::processInstrForSlow3OpLEA(MachineInstr &MI, const MachineOperand &Offset = MI.getOperand(4); const MachineOperand &Segment = MI.getOperand(5); - if (!(isThreeOperandsLEA(Base, Index, Offset) || + if (!(TII->isThreeOperandsLEA(MI) || hasInefficientLEABaseReg(Base, Index)) || !TII->isSafeToClobberEFLAGS(*MFI, MI) || Segment.getReg() != X86::NoRegister) diff --git a/llvm/lib/Target/X86/X86SchedPredicates.td b/llvm/lib/Target/X86/X86SchedPredicates.td new file mode 100644 index 0000000..27aaeb1 --- /dev/null +++ b/llvm/lib/Target/X86/X86SchedPredicates.td @@ -0,0 +1,49 @@ +//===-- X86SchedPredicates.td - X86 Scheduling Predicates --*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines scheduling predicate definitions that are common to +// all X86 subtargets. +// +//===----------------------------------------------------------------------===// + +// A predicate used to identify dependency-breaking instructions that clear the +// content of the destination register. Note that this predicate only checks if +// input registers are the same. This predicate doesn't make any assumptions on +// the expected instruction opcodes, because different processors may implement +// different zero-idioms. +def ZeroIdiomPredicate : CheckSameRegOperand<1, 2>; + +// A predicate used to check if an instruction is a LEA, and if it uses all +// three source operands: base, index, and offset. +def IsThreeOperandsLEAPredicate: CheckAll<[ + CheckOpcode<[LEA32r, LEA64r, LEA64_32r, LEA16r]>, + + // isRegOperand(Base) + CheckIsRegOperand<1>, + CheckNot>, + + // isRegOperand(Index) + CheckIsRegOperand<3>, + CheckNot>, + + // hasLEAOffset(Offset) + CheckAny<[ + CheckAll<[ + CheckIsImmOperand<4>, + CheckNot> + ]>, + CheckNonPortable<"MI.getOperand(4).isGlobal()"> + ]> +]>; + +// This predicate evaluates to true only if the input machine instruction is a +// 3-operands LEA. Tablegen automatically generates a new method for it in +// X86GenInstrInfo. +def IsThreeOperandsLEAFn : + TIIPredicate<"X86", "isThreeOperandsLEA", IsThreeOperandsLEAPredicate>; diff --git a/llvm/lib/Target/X86/X86Schedule.td b/llvm/lib/Target/X86/X86Schedule.td index f5f1bb9..270acb3 100644 --- a/llvm/lib/Target/X86/X86Schedule.td +++ b/llvm/lib/Target/X86/X86Schedule.td @@ -618,11 +618,6 @@ def SchedWriteFShuffleSizes : X86SchedWriteSizes; //===----------------------------------------------------------------------===// -// Common MCInstPredicate definitions used by variant scheduling classes. - -def ZeroIdiomPredicate : CheckSameRegOperand<1, 2>; - -//===----------------------------------------------------------------------===// // Generic Processor Scheduler Models. // IssueWidth is analogous to the number of decode units. Core and its diff --git a/llvm/lib/Target/X86/X86ScheduleBtVer2.td b/llvm/lib/Target/X86/X86ScheduleBtVer2.td index 177aa01..d539a7f 100644 --- a/llvm/lib/Target/X86/X86ScheduleBtVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBtVer2.td @@ -187,7 +187,6 @@ def : WriteRes; def : WriteRes; // This is for simple LEAs with one or two input operands. -// FIXME: SAGU 3-operand LEA def : WriteRes; // Bit counts. @@ -664,4 +663,38 @@ def : InstRW<[JWriteVZeroIdiomALUX], (instrs PSUBBrr, VPSUBBrr, PCMPGTDrr, VPCMPGTDrr, PCMPGTQrr, VPCMPGTQrr, PCMPGTWrr, VPCMPGTWrr)>; + +// This write is used for slow LEA instructions. +def JWrite3OpsLEA : SchedWriteRes<[JALU1, JSAGU]> { + let Latency = 2; +} + +// On Jaguar, a slow LEA is either a 3Ops LEA (base, index, offset), or an LEA +// with a `Scale` value different than 1. +def JSlowLEAPredicate : MCSchedPredicate< + CheckAny<[ + // A 3-operand LEA (base, index, offset). + IsThreeOperandsLEAFn, + // An LEA with a "Scale" different than 1. + CheckAll<[ + CheckIsImmOperand<2>, + CheckNot> + ]> + ]> +>; + +def JWriteLEA : SchedWriteVariant<[ + SchedVar, + SchedVar, [WriteLEA]> +]>; + +def : InstRW<[JWriteLEA], (instrs LEA32r, LEA64r, LEA64_32r)>; + +def JSlowLEA16r : SchedWriteRes<[JALU01]> { + let Latency = 3; + let ResourceCycles = [4]; +} + +def : InstRW<[JSlowLEA16r], (instrs LEA16r)>; + } // SchedModel diff --git a/llvm/test/CodeGen/X86/lea32-schedule.ll b/llvm/test/CodeGen/X86/lea32-schedule.ll index 6d92673..a9608f0 100644 --- a/llvm/test/CodeGen/X86/lea32-schedule.ll +++ b/llvm/test/CodeGen/X86/lea32-schedule.ll @@ -278,7 +278,7 @@ define i32 @test_lea_add_offset(i32, i32) { ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal 16(%rdi,%rsi), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal 16(%rdi,%rsi), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_offset: @@ -362,7 +362,7 @@ define i32 @test_lea_add_offset_big(i32, i32) { ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal -4096(%rdi,%rsi), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal -4096(%rdi,%rsi), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_offset_big: @@ -428,7 +428,7 @@ define i32 @test_lea_mul(i32) { ; BTVER2-LABEL: test_lea_mul: ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_mul: @@ -497,7 +497,7 @@ define i32 @test_lea_mul_offset(i32) { ; BTVER2-LABEL: test_lea_mul_offset: ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal -32(%rdi,%rdi,2), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal -32(%rdi,%rdi,2), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_mul_offset: @@ -572,7 +572,7 @@ define i32 @test_lea_mul_offset_big(i32) { ; BTVER2-LABEL: test_lea_mul_offset_big: ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal 10000(%rdi,%rdi,8), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal 10000(%rdi,%rdi,8), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_mul_offset_big: @@ -645,7 +645,7 @@ define i32 @test_lea_add_scale(i32, i32) { ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal (%rdi,%rsi,2), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_scale: @@ -724,7 +724,7 @@ define i32 @test_lea_add_scale_offset(i32, i32) { ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal 96(%rdi,%rsi,4), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal 96(%rdi,%rsi,4), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_scale_offset: @@ -809,7 +809,7 @@ define i32 @test_lea_add_scale_offset_big(i32, i32) { ; BTVER2: # %bb.0: ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi -; BTVER2-NEXT: leal -1200(%rdi,%rsi,8), %eax # sched: [1:0.50] +; BTVER2-NEXT: leal -1200(%rdi,%rsi,8), %eax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_scale_offset_big: diff --git a/llvm/test/CodeGen/X86/lea64-schedule.ll b/llvm/test/CodeGen/X86/lea64-schedule.ll index 549d002..df9df9b 100644 --- a/llvm/test/CodeGen/X86/lea64-schedule.ll +++ b/llvm/test/CodeGen/X86/lea64-schedule.ll @@ -226,7 +226,7 @@ define i64 @test_lea_add_offset(i64, i64) { ; ; BTVER2-LABEL: test_lea_add_offset: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq 16(%rdi,%rsi), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq 16(%rdi,%rsi), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_offset: @@ -292,7 +292,7 @@ define i64 @test_lea_add_offset_big(i64, i64) { ; ; BTVER2-LABEL: test_lea_add_offset_big: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq -4096(%rdi,%rsi), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq -4096(%rdi,%rsi), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_offset_big: @@ -348,7 +348,7 @@ define i64 @test_lea_mul(i64) { ; ; BTVER2-LABEL: test_lea_mul: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_mul: @@ -408,7 +408,7 @@ define i64 @test_lea_mul_offset(i64) { ; ; BTVER2-LABEL: test_lea_mul_offset: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq -32(%rdi,%rdi,2), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq -32(%rdi,%rdi,2), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_mul_offset: @@ -474,7 +474,7 @@ define i64 @test_lea_mul_offset_big(i64) { ; ; BTVER2-LABEL: test_lea_mul_offset_big: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq 10000(%rdi,%rdi,8), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq 10000(%rdi,%rdi,8), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_mul_offset_big: @@ -530,7 +530,7 @@ define i64 @test_lea_add_scale(i64, i64) { ; ; BTVER2-LABEL: test_lea_add_scale: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq (%rdi,%rsi,2), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq (%rdi,%rsi,2), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_scale: @@ -591,7 +591,7 @@ define i64 @test_lea_add_scale_offset(i64, i64) { ; ; BTVER2-LABEL: test_lea_add_scale_offset: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq 96(%rdi,%rsi,4), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq 96(%rdi,%rsi,4), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_scale_offset: @@ -658,7 +658,7 @@ define i64 @test_lea_add_scale_offset_big(i64, i64) { ; ; BTVER2-LABEL: test_lea_add_scale_offset_big: ; BTVER2: # %bb.0: -; BTVER2-NEXT: leaq -1200(%rdi,%rsi,8), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq -1200(%rdi,%rsi,8), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; ZNVER1-LABEL: test_lea_add_scale_offset_big: diff --git a/llvm/test/CodeGen/X86/mul-constant-i32.ll b/llvm/test/CodeGen/X86/mul-constant-i32.ll index 6468c3f..7dd7a7a 100644 --- a/llvm/test/CodeGen/X86/mul-constant-i32.ll +++ b/llvm/test/CodeGen/X86/mul-constant-i32.ll @@ -120,7 +120,7 @@ define i32 @test_mul_by_3(i32 %x) { ; X64-JAG-LABEL: test_mul_by_3: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_3: @@ -137,7 +137,7 @@ define i32 @test_mul_by_3(i32 %x) { ; JAG-NOOPT-LABEL: test_mul_by_3: ; JAG-NOOPT: # %bb.0: ; JAG-NOOPT-NEXT: # kill: def $edi killed $edi def $rdi -; JAG-NOOPT-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_3: @@ -171,7 +171,7 @@ define i32 @test_mul_by_4(i32 %x) { ; X64-JAG-LABEL: test_mul_by_4: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (,%rdi,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (,%rdi,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_4: @@ -189,7 +189,7 @@ define i32 @test_mul_by_4(i32 %x) { ; JAG-NOOPT-LABEL: test_mul_by_4: ; JAG-NOOPT: # %bb.0: ; JAG-NOOPT-NEXT: # kill: def $edi killed $edi def $rdi -; JAG-NOOPT-NEXT: leal (,%rdi,4), %eax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leal (,%rdi,4), %eax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_4: @@ -223,7 +223,7 @@ define i32 @test_mul_by_5(i32 %x) { ; X64-JAG-LABEL: test_mul_by_5: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_5: @@ -240,7 +240,7 @@ define i32 @test_mul_by_5(i32 %x) { ; JAG-NOOPT-LABEL: test_mul_by_5: ; JAG-NOOPT: # %bb.0: ; JAG-NOOPT-NEXT: # kill: def $edi killed $edi def $rdi -; JAG-NOOPT-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_5: @@ -277,7 +277,7 @@ define i32 @test_mul_by_6(i32 %x) { ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi ; X64-JAG-NEXT: addl %edi, %edi # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_6: @@ -328,7 +328,7 @@ define i32 @test_mul_by_7(i32 %x) { ; X64-JAG-LABEL: test_mul_by_7: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (,%rdi,8), %eax # sched: [2:1.00] ; X64-JAG-NEXT: subl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -378,7 +378,7 @@ define i32 @test_mul_by_8(i32 %x) { ; X64-JAG-LABEL: test_mul_by_8: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (,%rdi,8), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_8: @@ -396,7 +396,7 @@ define i32 @test_mul_by_8(i32 %x) { ; JAG-NOOPT-LABEL: test_mul_by_8: ; JAG-NOOPT: # %bb.0: ; JAG-NOOPT-NEXT: # kill: def $edi killed $edi def $rdi -; JAG-NOOPT-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leal (,%rdi,8), %eax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_8: @@ -430,7 +430,7 @@ define i32 @test_mul_by_9(i32 %x) { ; X64-JAG-LABEL: test_mul_by_9: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_9: @@ -447,7 +447,7 @@ define i32 @test_mul_by_9(i32 %x) { ; JAG-NOOPT-LABEL: test_mul_by_9: ; JAG-NOOPT: # %bb.0: ; JAG-NOOPT-NEXT: # kill: def $edi killed $edi def $rdi -; JAG-NOOPT-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_9: @@ -484,7 +484,7 @@ define i32 @test_mul_by_10(i32 %x) { ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi ; X64-JAG-NEXT: addl %edi, %edi # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_10: @@ -535,8 +535,8 @@ define i32 @test_mul_by_11(i32 %x) { ; X64-JAG-LABEL: test_mul_by_11: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rax,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rdi,%rax,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_11: @@ -586,7 +586,7 @@ define i32 @test_mul_by_12(i32 %x) { ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi ; X64-JAG-NEXT: shll $2, %edi # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_12: @@ -637,8 +637,8 @@ define i32 @test_mul_by_13(i32 %x) { ; X64-JAG-LABEL: test_mul_by_13: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_13: @@ -689,8 +689,8 @@ define i32 @test_mul_by_14(i32 %x) { ; X64-JAG-LABEL: test_mul_by_14: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -740,8 +740,8 @@ define i32 @test_mul_by_15(i32 %x) { ; X64-JAG-LABEL: test_mul_by_15: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_15: @@ -901,7 +901,7 @@ define i32 @test_mul_by_18(i32 %x) { ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi ; X64-JAG-NEXT: addl %edi, %edi # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_18: @@ -954,7 +954,7 @@ define i32 @test_mul_by_19(i32 %x) { ; X64-JAG-LABEL: test_mul_by_19: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: shll $2, %eax # sched: [1:0.50] ; X64-JAG-NEXT: subl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] @@ -1006,7 +1006,7 @@ define i32 @test_mul_by_20(i32 %x) { ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi ; X64-JAG-NEXT: shll $2, %edi # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_20: @@ -1057,8 +1057,8 @@ define i32 @test_mul_by_21(i32 %x) { ; X64-JAG-LABEL: test_mul_by_21: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_21: @@ -1109,8 +1109,8 @@ define i32 @test_mul_by_22(i32 %x) { ; X64-JAG-LABEL: test_mul_by_22: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1162,7 +1162,7 @@ define i32 @test_mul_by_23(i32 %x) { ; X64-JAG-LABEL: test_mul_by_23: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: shll $3, %eax # sched: [1:0.50] ; X64-JAG-NEXT: subl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] @@ -1214,7 +1214,7 @@ define i32 @test_mul_by_24(i32 %x) { ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi ; X64-JAG-NEXT: shll $3, %edi # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_24: @@ -1265,8 +1265,8 @@ define i32 @test_mul_by_25(i32 %x) { ; X64-JAG-LABEL: test_mul_by_25: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rax,%rax,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rax,%rax,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_25: @@ -1319,8 +1319,8 @@ define i32 @test_mul_by_26(i32 %x) { ; X64-JAG-LABEL: test_mul_by_26: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: subl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1370,8 +1370,8 @@ define i32 @test_mul_by_27(i32 %x) { ; X64-JAG-LABEL: test_mul_by_27: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_27: @@ -1424,8 +1424,8 @@ define i32 @test_mul_by_28(i32 %x) { ; X64-JAG-LABEL: test_mul_by_28: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1479,8 +1479,8 @@ define i32 @test_mul_by_29(i32 %x) { ; X64-JAG-LABEL: test_mul_by_29: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] -; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00] +; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [2:1.00] ; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] @@ -1695,8 +1695,8 @@ define i32 @test_mul_spec(i32 %x) nounwind { ; X64-JAG-LABEL: test_mul_spec: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi -; X64-JAG-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [1:0.50] -; X64-JAG-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [1:0.50] +; X64-JAG-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [2:1.00] +; X64-JAG-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [2:1.00] ; X64-JAG-NEXT: imull %ecx, %eax # sched: [3:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1721,8 +1721,8 @@ define i32 @test_mul_spec(i32 %x) nounwind { ; JAG-NOOPT-LABEL: test_mul_spec: ; JAG-NOOPT: # %bb.0: ; JAG-NOOPT-NEXT: # kill: def $edi killed $edi def $rdi -; JAG-NOOPT-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [1:0.50] -; JAG-NOOPT-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [2:1.00] +; JAG-NOOPT-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [2:1.00] ; JAG-NOOPT-NEXT: imull %ecx, %eax # sched: [3:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; diff --git a/llvm/test/CodeGen/X86/mul-constant-i64.ll b/llvm/test/CodeGen/X86/mul-constant-i64.ll index a9e5f9b..cdbda91 100644 --- a/llvm/test/CodeGen/X86/mul-constant-i64.ll +++ b/llvm/test/CodeGen/X86/mul-constant-i64.ll @@ -121,7 +121,7 @@ define i64 @test_mul_by_3(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_3: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_3: @@ -139,7 +139,7 @@ define i64 @test_mul_by_3(i64 %x) { ; ; JAG-NOOPT-LABEL: test_mul_by_3: ; JAG-NOOPT: # %bb.0: -; JAG-NOOPT-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_3: @@ -171,7 +171,7 @@ define i64 @test_mul_by_4(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_4: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (,%rdi,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (,%rdi,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_4: @@ -189,7 +189,7 @@ define i64 @test_mul_by_4(i64 %x) { ; ; JAG-NOOPT-LABEL: test_mul_by_4: ; JAG-NOOPT: # %bb.0: -; JAG-NOOPT-NEXT: leaq (,%rdi,4), %rax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leaq (,%rdi,4), %rax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_4: @@ -222,7 +222,7 @@ define i64 @test_mul_by_5(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_5: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_5: @@ -240,7 +240,7 @@ define i64 @test_mul_by_5(i64 %x) { ; ; JAG-NOOPT-LABEL: test_mul_by_5: ; JAG-NOOPT: # %bb.0: -; JAG-NOOPT-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_5: @@ -275,7 +275,7 @@ define i64 @test_mul_by_6(i64 %x) { ; X64-JAG-LABEL: test_mul_by_6: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: addq %rdi, %rdi # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_6: @@ -329,7 +329,7 @@ define i64 @test_mul_by_7(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_7: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (,%rdi,8), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (,%rdi,8), %rax # sched: [2:1.00] ; X64-JAG-NEXT: subq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -381,7 +381,7 @@ define i64 @test_mul_by_8(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_8: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (,%rdi,8), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (,%rdi,8), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_8: @@ -399,7 +399,7 @@ define i64 @test_mul_by_8(i64 %x) { ; ; JAG-NOOPT-LABEL: test_mul_by_8: ; JAG-NOOPT: # %bb.0: -; JAG-NOOPT-NEXT: leaq (,%rdi,8), %rax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leaq (,%rdi,8), %rax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_8: @@ -432,7 +432,7 @@ define i64 @test_mul_by_9(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_9: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_9: @@ -450,7 +450,7 @@ define i64 @test_mul_by_9(i64 %x) { ; ; JAG-NOOPT-LABEL: test_mul_by_9: ; JAG-NOOPT: # %bb.0: -; JAG-NOOPT-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; ; X64-SLM-LABEL: test_mul_by_9: @@ -485,7 +485,7 @@ define i64 @test_mul_by_10(i64 %x) { ; X64-JAG-LABEL: test_mul_by_10: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: addq %rdi, %rdi # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_10: @@ -539,8 +539,8 @@ define i64 @test_mul_by_11(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_11: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rax,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rdi,%rax,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_11: @@ -593,7 +593,7 @@ define i64 @test_mul_by_12(i64 %x) { ; X64-JAG-LABEL: test_mul_by_12: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: shlq $2, %rdi # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_12: @@ -647,8 +647,8 @@ define i64 @test_mul_by_13(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_13: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_13: @@ -703,8 +703,8 @@ define i64 @test_mul_by_14(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_14: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: addq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -758,8 +758,8 @@ define i64 @test_mul_by_15(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_15: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_15: @@ -928,7 +928,7 @@ define i64 @test_mul_by_18(i64 %x) { ; X64-JAG-LABEL: test_mul_by_18: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: addq %rdi, %rdi # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_18: @@ -984,7 +984,7 @@ define i64 @test_mul_by_19(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_19: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: shlq $2, %rax # sched: [1:0.50] ; X64-JAG-NEXT: subq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] @@ -1039,7 +1039,7 @@ define i64 @test_mul_by_20(i64 %x) { ; X64-JAG-LABEL: test_mul_by_20: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: shlq $2, %rdi # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_20: @@ -1093,8 +1093,8 @@ define i64 @test_mul_by_21(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_21: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_21: @@ -1149,8 +1149,8 @@ define i64 @test_mul_by_22(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_22: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: addq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1206,7 +1206,7 @@ define i64 @test_mul_by_23(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_23: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: shlq $3, %rax # sched: [1:0.50] ; X64-JAG-NEXT: subq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] @@ -1261,7 +1261,7 @@ define i64 @test_mul_by_24(i64 %x) { ; X64-JAG-LABEL: test_mul_by_24: ; X64-JAG: # %bb.0: ; X64-JAG-NEXT: shlq $3, %rdi # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_24: @@ -1315,8 +1315,8 @@ define i64 @test_mul_by_25(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_25: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rax,%rax,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rax,%rax,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_25: @@ -1372,8 +1372,8 @@ define i64 @test_mul_by_26(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_26: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: subq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1427,8 +1427,8 @@ define i64 @test_mul_by_27(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_27: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; ; X86-NOOPT-LABEL: test_mul_by_27: @@ -1484,8 +1484,8 @@ define i64 @test_mul_by_28(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_28: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: addq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1543,8 +1543,8 @@ define i64 @test_mul_by_29(i64 %x) { ; ; X64-JAG-LABEL: test_mul_by_29: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50] -; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00] +; X64-JAG-NEXT: leaq (%rax,%rax,2), %rax # sched: [2:1.00] ; X64-JAG-NEXT: addq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: addq %rdi, %rax # sched: [1:0.50] ; X64-JAG-NEXT: retq # sched: [4:1.00] @@ -1800,8 +1800,8 @@ define i64 @test_mul_spec(i64 %x) nounwind { ; ; X64-JAG-LABEL: test_mul_spec: ; X64-JAG: # %bb.0: -; X64-JAG-NEXT: leaq 42(%rdi,%rdi,8), %rcx # sched: [1:0.50] -; X64-JAG-NEXT: leaq 2(%rdi,%rdi,4), %rax # sched: [1:0.50] +; X64-JAG-NEXT: leaq 42(%rdi,%rdi,8), %rcx # sched: [2:1.00] +; X64-JAG-NEXT: leaq 2(%rdi,%rdi,4), %rax # sched: [2:1.00] ; X64-JAG-NEXT: imulq %rcx, %rax # sched: [6:4.00] ; X64-JAG-NEXT: retq # sched: [4:1.00] ; @@ -1848,8 +1848,8 @@ define i64 @test_mul_spec(i64 %x) nounwind { ; ; JAG-NOOPT-LABEL: test_mul_spec: ; JAG-NOOPT: # %bb.0: -; JAG-NOOPT-NEXT: leaq 42(%rdi,%rdi,8), %rcx # sched: [1:0.50] -; JAG-NOOPT-NEXT: leaq 2(%rdi,%rdi,4), %rax # sched: [1:0.50] +; JAG-NOOPT-NEXT: leaq 42(%rdi,%rdi,8), %rcx # sched: [2:1.00] +; JAG-NOOPT-NEXT: leaq 2(%rdi,%rdi,4), %rax # sched: [2:1.00] ; JAG-NOOPT-NEXT: imulq %rcx, %rax # sched: [6:4.00] ; JAG-NOOPT-NEXT: retq # sched: [4:1.00] ; diff --git a/llvm/test/CodeGen/X86/schedule-x86-64-shld.ll b/llvm/test/CodeGen/X86/schedule-x86-64-shld.ll index 3bc4362..3910a46 100644 --- a/llvm/test/CodeGen/X86/schedule-x86-64-shld.ll +++ b/llvm/test/CodeGen/X86/schedule-x86-64-shld.ll @@ -103,7 +103,7 @@ define i64 @rshift10(i64 %a, i64 %b) nounwind readnone { ; BTVER2-LABEL: rshift10: ; BTVER2: # %bb.0: # %entry ; BTVER2-NEXT: shrq $62, %rdi # sched: [1:0.50] -; BTVER2-NEXT: leaq (%rdi,%rsi,4), %rax # sched: [1:0.50] +; BTVER2-NEXT: leaq (%rdi,%rsi,4), %rax # sched: [2:1.00] ; BTVER2-NEXT: retq # sched: [4:1.00] ; ; BDVER1-LABEL: rshift10: diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-lea.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-lea.s index 347d87c..6140afa 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-lea.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-lea.s @@ -148,141 +148,141 @@ lea 1024(%rax, %rbx, 2), %rcx # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: -# CHECK-NEXT: 1 1 0.50 leaw 0, %cx +# CHECK-NEXT: 1 3 2.00 leaw 0, %cx # CHECK-NEXT: 1 1 0.50 leal 0, %ecx # CHECK-NEXT: 1 1 0.50 leaq 0, %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%eax), %cx +# CHECK-NEXT: 1 3 2.00 leaw (%eax), %cx # CHECK-NEXT: 1 1 0.50 leal (%eax), %ecx # CHECK-NEXT: 1 1 0.50 leaq (%eax), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%rax), %cx +# CHECK-NEXT: 1 3 2.00 leaw (%rax), %cx # CHECK-NEXT: 1 1 0.50 leal (%rax), %ecx # CHECK-NEXT: 1 1 0.50 leaq (%rax), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal (,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal (,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal (,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal (,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (,%ebx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal (,%ebx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq (,%ebx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (,%rbx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal (,%rbx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq (,%rbx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%eax,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 leaw (%eax,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal (%eax,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (%eax,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%rax,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (%rax,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal (%rax,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (%rax,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%eax,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (%eax,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal (%eax,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (%eax,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%rax,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw (%rax,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal (%rax,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq (%rax,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%eax,%ebx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal (%eax,%ebx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq (%eax,%ebx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw (%rax,%rbx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal (%rax,%rbx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq (%rax,%rbx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16, %cx +# CHECK-NEXT: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 leaw -16, %cx # CHECK-NEXT: 1 1 0.50 leal -16, %ecx # CHECK-NEXT: 1 1 0.50 leaq -16, %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%eax), %cx +# CHECK-NEXT: 1 3 2.00 leaw -16(%eax), %cx # CHECK-NEXT: 1 1 0.50 leal -16(%eax), %ecx # CHECK-NEXT: 1 1 0.50 leaq -16(%eax), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%rax), %cx +# CHECK-NEXT: 1 3 2.00 leaw -16(%rax), %cx # CHECK-NEXT: 1 1 0.50 leal -16(%rax), %ecx # CHECK-NEXT: 1 1 0.50 leaq -16(%rax), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw -16(,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal -16(,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq -16(,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw -16(,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal -16(,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq -16(,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw -16(,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal -16(,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq -16(,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw -16(,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal -16(,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq -16(,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(,%ebx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(,%ebx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(,%ebx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(,%rbx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(,%rbx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(,%rbx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%eax,%ebx), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(%eax,%ebx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(%eax,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%rax,%rbx), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(%rax,%rbx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(%rax,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%eax,%ebx), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(%eax,%ebx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(%eax,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%rax,%rbx), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(%rax,%rbx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(%rax,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%eax,%ebx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(%eax,%ebx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(%eax,%ebx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw -16(%rax,%rbx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal -16(%rax,%rbx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq -16(%rax,%rbx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024, %cx +# CHECK-NEXT: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 leaw 1024, %cx # CHECK-NEXT: 1 1 0.50 leal 1024, %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024, %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%eax), %cx +# CHECK-NEXT: 1 3 2.00 leaw 1024(%eax), %cx # CHECK-NEXT: 1 1 0.50 leal 1024(%eax), %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024(%eax), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%rax), %cx +# CHECK-NEXT: 1 3 2.00 leaw 1024(%rax), %cx # CHECK-NEXT: 1 1 0.50 leal 1024(%rax), %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024(%rax), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw 1024(,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal 1024(,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024(,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw 1024(,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal 1024(,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024(,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(,%ebx), %cx +# CHECK-NEXT: 1 3 2.00 leaw 1024(,%ebx), %cx # CHECK-NEXT: 1 1 0.50 leal 1024(,%ebx), %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024(,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(,%rbx), %cx +# CHECK-NEXT: 1 3 2.00 leaw 1024(,%rbx), %cx # CHECK-NEXT: 1 1 0.50 leal 1024(,%rbx), %ecx # CHECK-NEXT: 1 1 0.50 leaq 1024(,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(,%ebx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(,%ebx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(,%ebx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(,%rbx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(,%rbx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(,%rbx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%eax,%ebx), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(%eax,%ebx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(%eax,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%rax,%rbx), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(%rax,%rbx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(%rax,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%eax,%ebx), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(%eax,%ebx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(%eax,%ebx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%rax,%rbx), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(%rax,%rbx), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(%rax,%rbx), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%eax,%ebx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(%eax,%ebx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(%eax,%ebx,2), %rcx -# CHECK-NEXT: 1 1 0.50 leaw 1024(%rax,%rbx,2), %cx -# CHECK-NEXT: 1 1 0.50 leal 1024(%rax,%rbx,2), %ecx -# CHECK-NEXT: 1 1 0.50 leaq 1024(%rax,%rbx,2), %rcx +# CHECK-NEXT: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: 1 3 2.00 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: Resources: # CHECK-NEXT: [0] - JALU0 @@ -302,142 +302,142 @@ lea 1024(%rax, %rbx, 2), %rcx # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] -# CHECK-NEXT: 67.50 67.50 - - - - - - - - - - - - +# CHECK-NEXT: 115.00 155.00 - - - - - - - 40.00 - - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions: -# CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - leaw 0, %cx +# CHECK-NEXT: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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 +# CHECK-NEXT: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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: 2.00 2.00 - - - - - - - - - - - - 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 -- 2.7.4