[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
This commit is contained in:
Andrea Di Biagio 2018-07-19 16:42:15 +00:00
parent f7ea3036a7
commit 0792e8ab30
13 changed files with 367 additions and 292 deletions

View File

@ -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

View File

@ -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

View File

@ -402,6 +402,7 @@ include "X86RegisterBanks.td"
include "X86Schedule.td"
include "X86InstrInfo.td"
include "X86SchedPredicates.td"
def X86InstrInfo : InstrInfo;

View File

@ -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)

View File

@ -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<CheckInvalidRegOperand<1>>,
// isRegOperand(Index)
CheckIsRegOperand<3>,
CheckNot<CheckInvalidRegOperand<3>>,
// hasLEAOffset(Offset)
CheckAny<[
CheckAll<[
CheckIsImmOperand<4>,
CheckNot<CheckZeroOperand<4>>
]>,
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>;

View File

@ -617,11 +617,6 @@ def SchedWriteFLogicSizes
def SchedWriteFShuffleSizes
: X86SchedWriteSizes<SchedWriteFShuffle, SchedWriteFShuffle>;
//===----------------------------------------------------------------------===//
// Common MCInstPredicate definitions used by variant scheduling classes.
def ZeroIdiomPredicate : CheckSameRegOperand<1, 2>;
//===----------------------------------------------------------------------===//
// Generic Processor Scheduler Models.

View File

@ -187,7 +187,6 @@ def : WriteRes<WriteSETCCStore, [JALU01,JSAGU]>;
def : WriteRes<WriteLAHFSAHF, [JALU01]>;
// This is for simple LEAs with one or two input operands.
// FIXME: SAGU 3-operand LEA
def : WriteRes<WriteLEA, [JALU01]>;
// 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<CheckImmOperand<2, 1>>
]>
]>
>;
def JWriteLEA : SchedWriteVariant<[
SchedVar<JSlowLEAPredicate, [JWrite3OpsLEA]>,
SchedVar<MCSchedPredicate<TruePred>, [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

View File

@ -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:

View File

@ -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:

View File

@ -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]
;

View File

@ -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]
;

View File

@ -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:

View File

@ -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