1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY 7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL 8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL 9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE 10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL 11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 12 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 13 14 define i32 @test_lea_offset(i32) { 15 ; GENERIC-LABEL: test_lea_offset: 16 ; GENERIC: # %bb.0: 17 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 18 ; GENERIC-NEXT: leal -24(%rdi), %eax # sched: [1:0.50] 19 ; GENERIC-NEXT: retq # sched: [1:1.00] 20 ; 21 ; ATOM-LABEL: test_lea_offset: 22 ; ATOM: # %bb.0: 23 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 24 ; ATOM-NEXT: leal -24(%rdi), %eax # sched: [1:1.00] 25 ; ATOM-NEXT: nop # sched: [1:0.50] 26 ; ATOM-NEXT: nop # sched: [1:0.50] 27 ; ATOM-NEXT: nop # sched: [1:0.50] 28 ; ATOM-NEXT: nop # sched: [1:0.50] 29 ; ATOM-NEXT: nop # sched: [1:0.50] 30 ; ATOM-NEXT: nop # sched: [1:0.50] 31 ; ATOM-NEXT: retq # sched: [79:39.50] 32 ; 33 ; SLM-LABEL: test_lea_offset: 34 ; SLM: # %bb.0: 35 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 36 ; SLM-NEXT: leal -24(%rdi), %eax # sched: [1:1.00] 37 ; SLM-NEXT: retq # sched: [4:1.00] 38 ; 39 ; SANDY-LABEL: test_lea_offset: 40 ; SANDY: # %bb.0: 41 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 42 ; SANDY-NEXT: leal -24(%rdi), %eax # sched: [1:0.50] 43 ; SANDY-NEXT: retq # sched: [1:1.00] 44 ; 45 ; HASWELL-LABEL: test_lea_offset: 46 ; HASWELL: # %bb.0: 47 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 48 ; HASWELL-NEXT: leal -24(%rdi), %eax # sched: [1:0.50] 49 ; HASWELL-NEXT: retq # sched: [7:1.00] 50 ; 51 ; BROADWELL-LABEL: test_lea_offset: 52 ; BROADWELL: # %bb.0: 53 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 54 ; BROADWELL-NEXT: leal -24(%rdi), %eax # sched: [1:0.50] 55 ; BROADWELL-NEXT: retq # sched: [7:1.00] 56 ; 57 ; SKYLAKE-LABEL: test_lea_offset: 58 ; SKYLAKE: # %bb.0: 59 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 60 ; SKYLAKE-NEXT: leal -24(%rdi), %eax # sched: [1:0.50] 61 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 62 ; 63 ; BTVER2-LABEL: test_lea_offset: 64 ; BTVER2: # %bb.0: 65 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 66 ; BTVER2-NEXT: leal -24(%rdi), %eax # sched: [1:0.50] 67 ; BTVER2-NEXT: retq # sched: [4:1.00] 68 ; 69 ; ZNVER1-LABEL: test_lea_offset: 70 ; ZNVER1: # %bb.0: 71 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 72 ; ZNVER1-NEXT: leal -24(%rdi), %eax # sched: [1:0.25] 73 ; ZNVER1-NEXT: retq # sched: [1:0.50] 74 %2 = add nsw i32 %0, -24 75 ret i32 %2 76 } 77 78 define i32 @test_lea_offset_big(i32) { 79 ; GENERIC-LABEL: test_lea_offset_big: 80 ; GENERIC: # %bb.0: 81 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 82 ; GENERIC-NEXT: leal 1024(%rdi), %eax # sched: [1:0.50] 83 ; GENERIC-NEXT: retq # sched: [1:1.00] 84 ; 85 ; ATOM-LABEL: test_lea_offset_big: 86 ; ATOM: # %bb.0: 87 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 88 ; ATOM-NEXT: leal 1024(%rdi), %eax # sched: [1:1.00] 89 ; ATOM-NEXT: nop # sched: [1:0.50] 90 ; ATOM-NEXT: nop # sched: [1:0.50] 91 ; ATOM-NEXT: nop # sched: [1:0.50] 92 ; ATOM-NEXT: nop # sched: [1:0.50] 93 ; ATOM-NEXT: nop # sched: [1:0.50] 94 ; ATOM-NEXT: nop # sched: [1:0.50] 95 ; ATOM-NEXT: retq # sched: [79:39.50] 96 ; 97 ; SLM-LABEL: test_lea_offset_big: 98 ; SLM: # %bb.0: 99 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 100 ; SLM-NEXT: leal 1024(%rdi), %eax # sched: [1:1.00] 101 ; SLM-NEXT: retq # sched: [4:1.00] 102 ; 103 ; SANDY-LABEL: test_lea_offset_big: 104 ; SANDY: # %bb.0: 105 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 106 ; SANDY-NEXT: leal 1024(%rdi), %eax # sched: [1:0.50] 107 ; SANDY-NEXT: retq # sched: [1:1.00] 108 ; 109 ; HASWELL-LABEL: test_lea_offset_big: 110 ; HASWELL: # %bb.0: 111 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 112 ; HASWELL-NEXT: leal 1024(%rdi), %eax # sched: [1:0.50] 113 ; HASWELL-NEXT: retq # sched: [7:1.00] 114 ; 115 ; BROADWELL-LABEL: test_lea_offset_big: 116 ; BROADWELL: # %bb.0: 117 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 118 ; BROADWELL-NEXT: leal 1024(%rdi), %eax # sched: [1:0.50] 119 ; BROADWELL-NEXT: retq # sched: [7:1.00] 120 ; 121 ; SKYLAKE-LABEL: test_lea_offset_big: 122 ; SKYLAKE: # %bb.0: 123 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 124 ; SKYLAKE-NEXT: leal 1024(%rdi), %eax # sched: [1:0.50] 125 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 126 ; 127 ; BTVER2-LABEL: test_lea_offset_big: 128 ; BTVER2: # %bb.0: 129 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 130 ; BTVER2-NEXT: leal 1024(%rdi), %eax # sched: [1:0.50] 131 ; BTVER2-NEXT: retq # sched: [4:1.00] 132 ; 133 ; ZNVER1-LABEL: test_lea_offset_big: 134 ; ZNVER1: # %bb.0: 135 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 136 ; ZNVER1-NEXT: leal 1024(%rdi), %eax # sched: [1:0.25] 137 ; ZNVER1-NEXT: retq # sched: [1:0.50] 138 %2 = add nsw i32 %0, 1024 139 ret i32 %2 140 } 141 142 ; Function Attrs: norecurse nounwind readnone uwtable 143 define i32 @test_lea_add(i32, i32) { 144 ; GENERIC-LABEL: test_lea_add: 145 ; GENERIC: # %bb.0: 146 ; GENERIC-NEXT: # kill: def $esi killed $esi def $rsi 147 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 148 ; GENERIC-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 149 ; GENERIC-NEXT: retq # sched: [1:1.00] 150 ; 151 ; ATOM-LABEL: test_lea_add: 152 ; ATOM: # %bb.0: 153 ; ATOM-NEXT: # kill: def $esi killed $esi def $rsi 154 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 155 ; ATOM-NEXT: leal (%rdi,%rsi), %eax # sched: [1:1.00] 156 ; ATOM-NEXT: nop # sched: [1:0.50] 157 ; ATOM-NEXT: nop # sched: [1:0.50] 158 ; ATOM-NEXT: nop # sched: [1:0.50] 159 ; ATOM-NEXT: nop # sched: [1:0.50] 160 ; ATOM-NEXT: nop # sched: [1:0.50] 161 ; ATOM-NEXT: nop # sched: [1:0.50] 162 ; ATOM-NEXT: retq # sched: [79:39.50] 163 ; 164 ; SLM-LABEL: test_lea_add: 165 ; SLM: # %bb.0: 166 ; SLM-NEXT: # kill: def $esi killed $esi def $rsi 167 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 168 ; SLM-NEXT: leal (%rdi,%rsi), %eax # sched: [1:1.00] 169 ; SLM-NEXT: retq # sched: [4:1.00] 170 ; 171 ; SANDY-LABEL: test_lea_add: 172 ; SANDY: # %bb.0: 173 ; SANDY-NEXT: # kill: def $esi killed $esi def $rsi 174 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 175 ; SANDY-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 176 ; SANDY-NEXT: retq # sched: [1:1.00] 177 ; 178 ; HASWELL-LABEL: test_lea_add: 179 ; HASWELL: # %bb.0: 180 ; HASWELL-NEXT: # kill: def $esi killed $esi def $rsi 181 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 182 ; HASWELL-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 183 ; HASWELL-NEXT: retq # sched: [7:1.00] 184 ; 185 ; BROADWELL-LABEL: test_lea_add: 186 ; BROADWELL: # %bb.0: 187 ; BROADWELL-NEXT: # kill: def $esi killed $esi def $rsi 188 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 189 ; BROADWELL-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 190 ; BROADWELL-NEXT: retq # sched: [7:1.00] 191 ; 192 ; SKYLAKE-LABEL: test_lea_add: 193 ; SKYLAKE: # %bb.0: 194 ; SKYLAKE-NEXT: # kill: def $esi killed $esi def $rsi 195 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 196 ; SKYLAKE-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 197 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 198 ; 199 ; BTVER2-LABEL: test_lea_add: 200 ; BTVER2: # %bb.0: 201 ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi 202 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 203 ; BTVER2-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 204 ; BTVER2-NEXT: retq # sched: [4:1.00] 205 ; 206 ; ZNVER1-LABEL: test_lea_add: 207 ; ZNVER1: # %bb.0: 208 ; ZNVER1-NEXT: # kill: def $esi killed $esi def $rsi 209 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 210 ; ZNVER1-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.25] 211 ; ZNVER1-NEXT: retq # sched: [1:0.50] 212 %3 = add nsw i32 %1, %0 213 ret i32 %3 214 } 215 216 define i32 @test_lea_add_offset(i32, i32) { 217 ; GENERIC-LABEL: test_lea_add_offset: 218 ; GENERIC: # %bb.0: 219 ; GENERIC-NEXT: # kill: def $esi killed $esi def $rsi 220 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 221 ; GENERIC-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 222 ; GENERIC-NEXT: addl $16, %eax # sched: [1:0.33] 223 ; GENERIC-NEXT: retq # sched: [1:1.00] 224 ; 225 ; ATOM-LABEL: test_lea_add_offset: 226 ; ATOM: # %bb.0: 227 ; ATOM-NEXT: # kill: def $esi killed $esi def $rsi 228 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 229 ; ATOM-NEXT: leal 16(%rdi,%rsi), %eax # sched: [1:1.00] 230 ; ATOM-NEXT: nop # sched: [1:0.50] 231 ; ATOM-NEXT: nop # sched: [1:0.50] 232 ; ATOM-NEXT: nop # sched: [1:0.50] 233 ; ATOM-NEXT: nop # sched: [1:0.50] 234 ; ATOM-NEXT: nop # sched: [1:0.50] 235 ; ATOM-NEXT: nop # sched: [1:0.50] 236 ; ATOM-NEXT: retq # sched: [79:39.50] 237 ; 238 ; SLM-LABEL: test_lea_add_offset: 239 ; SLM: # %bb.0: 240 ; SLM-NEXT: # kill: def $esi killed $esi def $rsi 241 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 242 ; SLM-NEXT: leal 16(%rdi,%rsi), %eax # sched: [1:1.00] 243 ; SLM-NEXT: retq # sched: [4:1.00] 244 ; 245 ; SANDY-LABEL: test_lea_add_offset: 246 ; SANDY: # %bb.0: 247 ; SANDY-NEXT: # kill: def $esi killed $esi def $rsi 248 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 249 ; SANDY-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 250 ; SANDY-NEXT: addl $16, %eax # sched: [1:0.33] 251 ; SANDY-NEXT: retq # sched: [1:1.00] 252 ; 253 ; HASWELL-LABEL: test_lea_add_offset: 254 ; HASWELL: # %bb.0: 255 ; HASWELL-NEXT: # kill: def $esi killed $esi def $rsi 256 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 257 ; HASWELL-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 258 ; HASWELL-NEXT: addl $16, %eax # sched: [1:0.25] 259 ; HASWELL-NEXT: retq # sched: [7:1.00] 260 ; 261 ; BROADWELL-LABEL: test_lea_add_offset: 262 ; BROADWELL: # %bb.0: 263 ; BROADWELL-NEXT: # kill: def $esi killed $esi def $rsi 264 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 265 ; BROADWELL-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 266 ; BROADWELL-NEXT: addl $16, %eax # sched: [1:0.25] 267 ; BROADWELL-NEXT: retq # sched: [7:1.00] 268 ; 269 ; SKYLAKE-LABEL: test_lea_add_offset: 270 ; SKYLAKE: # %bb.0: 271 ; SKYLAKE-NEXT: # kill: def $esi killed $esi def $rsi 272 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 273 ; SKYLAKE-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 274 ; SKYLAKE-NEXT: addl $16, %eax # sched: [1:0.25] 275 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 276 ; 277 ; BTVER2-LABEL: test_lea_add_offset: 278 ; BTVER2: # %bb.0: 279 ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi 280 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 281 ; BTVER2-NEXT: leal 16(%rdi,%rsi), %eax # sched: [2:1.00] 282 ; BTVER2-NEXT: retq # sched: [4:1.00] 283 ; 284 ; ZNVER1-LABEL: test_lea_add_offset: 285 ; ZNVER1: # %bb.0: 286 ; ZNVER1-NEXT: # kill: def $esi killed $esi def $rsi 287 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 288 ; ZNVER1-NEXT: leal 16(%rdi,%rsi), %eax # sched: [1:0.25] 289 ; ZNVER1-NEXT: retq # sched: [1:0.50] 290 %3 = add i32 %0, 16 291 %4 = add i32 %3, %1 292 ret i32 %4 293 } 294 295 define i32 @test_lea_add_offset_big(i32, i32) { 296 ; GENERIC-LABEL: test_lea_add_offset_big: 297 ; GENERIC: # %bb.0: 298 ; GENERIC-NEXT: # kill: def $esi killed $esi def $rsi 299 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 300 ; GENERIC-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 301 ; GENERIC-NEXT: addl $-4096, %eax # imm = 0xF000 302 ; GENERIC-NEXT: # sched: [1:0.33] 303 ; GENERIC-NEXT: retq # sched: [1:1.00] 304 ; 305 ; ATOM-LABEL: test_lea_add_offset_big: 306 ; ATOM: # %bb.0: 307 ; ATOM-NEXT: # kill: def $esi killed $esi def $rsi 308 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 309 ; ATOM-NEXT: leal -4096(%rdi,%rsi), %eax # sched: [1:1.00] 310 ; ATOM-NEXT: nop # sched: [1:0.50] 311 ; ATOM-NEXT: nop # sched: [1:0.50] 312 ; ATOM-NEXT: nop # sched: [1:0.50] 313 ; ATOM-NEXT: nop # sched: [1:0.50] 314 ; ATOM-NEXT: nop # sched: [1:0.50] 315 ; ATOM-NEXT: nop # sched: [1:0.50] 316 ; ATOM-NEXT: retq # sched: [79:39.50] 317 ; 318 ; SLM-LABEL: test_lea_add_offset_big: 319 ; SLM: # %bb.0: 320 ; SLM-NEXT: # kill: def $esi killed $esi def $rsi 321 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 322 ; SLM-NEXT: leal -4096(%rdi,%rsi), %eax # sched: [1:1.00] 323 ; SLM-NEXT: retq # sched: [4:1.00] 324 ; 325 ; SANDY-LABEL: test_lea_add_offset_big: 326 ; SANDY: # %bb.0: 327 ; SANDY-NEXT: # kill: def $esi killed $esi def $rsi 328 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 329 ; SANDY-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 330 ; SANDY-NEXT: addl $-4096, %eax # imm = 0xF000 331 ; SANDY-NEXT: # sched: [1:0.33] 332 ; SANDY-NEXT: retq # sched: [1:1.00] 333 ; 334 ; HASWELL-LABEL: test_lea_add_offset_big: 335 ; HASWELL: # %bb.0: 336 ; HASWELL-NEXT: # kill: def $esi killed $esi def $rsi 337 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 338 ; HASWELL-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 339 ; HASWELL-NEXT: addl $-4096, %eax # imm = 0xF000 340 ; HASWELL-NEXT: # sched: [1:0.25] 341 ; HASWELL-NEXT: retq # sched: [7:1.00] 342 ; 343 ; BROADWELL-LABEL: test_lea_add_offset_big: 344 ; BROADWELL: # %bb.0: 345 ; BROADWELL-NEXT: # kill: def $esi killed $esi def $rsi 346 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 347 ; BROADWELL-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 348 ; BROADWELL-NEXT: addl $-4096, %eax # imm = 0xF000 349 ; BROADWELL-NEXT: # sched: [1:0.25] 350 ; BROADWELL-NEXT: retq # sched: [7:1.00] 351 ; 352 ; SKYLAKE-LABEL: test_lea_add_offset_big: 353 ; SKYLAKE: # %bb.0: 354 ; SKYLAKE-NEXT: # kill: def $esi killed $esi def $rsi 355 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 356 ; SKYLAKE-NEXT: leal (%rdi,%rsi), %eax # sched: [1:0.50] 357 ; SKYLAKE-NEXT: addl $-4096, %eax # imm = 0xF000 358 ; SKYLAKE-NEXT: # sched: [1:0.25] 359 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 360 ; 361 ; BTVER2-LABEL: test_lea_add_offset_big: 362 ; BTVER2: # %bb.0: 363 ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi 364 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 365 ; BTVER2-NEXT: leal -4096(%rdi,%rsi), %eax # sched: [2:1.00] 366 ; BTVER2-NEXT: retq # sched: [4:1.00] 367 ; 368 ; ZNVER1-LABEL: test_lea_add_offset_big: 369 ; ZNVER1: # %bb.0: 370 ; ZNVER1-NEXT: # kill: def $esi killed $esi def $rsi 371 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 372 ; ZNVER1-NEXT: leal -4096(%rdi,%rsi), %eax # sched: [1:0.25] 373 ; ZNVER1-NEXT: retq # sched: [1:0.50] 374 %3 = add i32 %0, -4096 375 %4 = add i32 %3, %1 376 ret i32 %4 377 } 378 379 define i32 @test_lea_mul(i32) { 380 ; GENERIC-LABEL: test_lea_mul: 381 ; GENERIC: # %bb.0: 382 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 383 ; GENERIC-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 384 ; GENERIC-NEXT: retq # sched: [1:1.00] 385 ; 386 ; ATOM-LABEL: test_lea_mul: 387 ; ATOM: # %bb.0: 388 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 389 ; ATOM-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00] 390 ; ATOM-NEXT: nop # sched: [1:0.50] 391 ; ATOM-NEXT: nop # sched: [1:0.50] 392 ; ATOM-NEXT: nop # sched: [1:0.50] 393 ; ATOM-NEXT: nop # sched: [1:0.50] 394 ; ATOM-NEXT: nop # sched: [1:0.50] 395 ; ATOM-NEXT: nop # sched: [1:0.50] 396 ; ATOM-NEXT: retq # sched: [79:39.50] 397 ; 398 ; SLM-LABEL: test_lea_mul: 399 ; SLM: # %bb.0: 400 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 401 ; SLM-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00] 402 ; SLM-NEXT: retq # sched: [4:1.00] 403 ; 404 ; SANDY-LABEL: test_lea_mul: 405 ; SANDY: # %bb.0: 406 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 407 ; SANDY-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 408 ; SANDY-NEXT: retq # sched: [1:1.00] 409 ; 410 ; HASWELL-LABEL: test_lea_mul: 411 ; HASWELL: # %bb.0: 412 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 413 ; HASWELL-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 414 ; HASWELL-NEXT: retq # sched: [7:1.00] 415 ; 416 ; BROADWELL-LABEL: test_lea_mul: 417 ; BROADWELL: # %bb.0: 418 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 419 ; BROADWELL-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 420 ; BROADWELL-NEXT: retq # sched: [7:1.00] 421 ; 422 ; SKYLAKE-LABEL: test_lea_mul: 423 ; SKYLAKE: # %bb.0: 424 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 425 ; SKYLAKE-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 426 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 427 ; 428 ; BTVER2-LABEL: test_lea_mul: 429 ; BTVER2: # %bb.0: 430 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 431 ; BTVER2-NEXT: leal (%rdi,%rdi,2), %eax # sched: [2:1.00] 432 ; BTVER2-NEXT: retq # sched: [4:1.00] 433 ; 434 ; ZNVER1-LABEL: test_lea_mul: 435 ; ZNVER1: # %bb.0: 436 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 437 ; ZNVER1-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.25] 438 ; ZNVER1-NEXT: retq # sched: [1:0.50] 439 %2 = mul nsw i32 %0, 3 440 ret i32 %2 441 } 442 443 define i32 @test_lea_mul_offset(i32) { 444 ; GENERIC-LABEL: test_lea_mul_offset: 445 ; GENERIC: # %bb.0: 446 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 447 ; GENERIC-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 448 ; GENERIC-NEXT: addl $-32, %eax # sched: [1:0.33] 449 ; GENERIC-NEXT: retq # sched: [1:1.00] 450 ; 451 ; ATOM-LABEL: test_lea_mul_offset: 452 ; ATOM: # %bb.0: 453 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 454 ; ATOM-NEXT: leal -32(%rdi,%rdi,2), %eax # sched: [1:1.00] 455 ; ATOM-NEXT: nop # sched: [1:0.50] 456 ; ATOM-NEXT: nop # sched: [1:0.50] 457 ; ATOM-NEXT: nop # sched: [1:0.50] 458 ; ATOM-NEXT: nop # sched: [1:0.50] 459 ; ATOM-NEXT: nop # sched: [1:0.50] 460 ; ATOM-NEXT: nop # sched: [1:0.50] 461 ; ATOM-NEXT: retq # sched: [79:39.50] 462 ; 463 ; SLM-LABEL: test_lea_mul_offset: 464 ; SLM: # %bb.0: 465 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 466 ; SLM-NEXT: leal -32(%rdi,%rdi,2), %eax # sched: [1:1.00] 467 ; SLM-NEXT: retq # sched: [4:1.00] 468 ; 469 ; SANDY-LABEL: test_lea_mul_offset: 470 ; SANDY: # %bb.0: 471 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 472 ; SANDY-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 473 ; SANDY-NEXT: addl $-32, %eax # sched: [1:0.33] 474 ; SANDY-NEXT: retq # sched: [1:1.00] 475 ; 476 ; HASWELL-LABEL: test_lea_mul_offset: 477 ; HASWELL: # %bb.0: 478 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 479 ; HASWELL-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 480 ; HASWELL-NEXT: addl $-32, %eax # sched: [1:0.25] 481 ; HASWELL-NEXT: retq # sched: [7:1.00] 482 ; 483 ; BROADWELL-LABEL: test_lea_mul_offset: 484 ; BROADWELL: # %bb.0: 485 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 486 ; BROADWELL-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 487 ; BROADWELL-NEXT: addl $-32, %eax # sched: [1:0.25] 488 ; BROADWELL-NEXT: retq # sched: [7:1.00] 489 ; 490 ; SKYLAKE-LABEL: test_lea_mul_offset: 491 ; SKYLAKE: # %bb.0: 492 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 493 ; SKYLAKE-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50] 494 ; SKYLAKE-NEXT: addl $-32, %eax # sched: [1:0.25] 495 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 496 ; 497 ; BTVER2-LABEL: test_lea_mul_offset: 498 ; BTVER2: # %bb.0: 499 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 500 ; BTVER2-NEXT: leal -32(%rdi,%rdi,2), %eax # sched: [2:1.00] 501 ; BTVER2-NEXT: retq # sched: [4:1.00] 502 ; 503 ; ZNVER1-LABEL: test_lea_mul_offset: 504 ; ZNVER1: # %bb.0: 505 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 506 ; ZNVER1-NEXT: leal -32(%rdi,%rdi,2), %eax # sched: [1:0.25] 507 ; ZNVER1-NEXT: retq # sched: [1:0.50] 508 %2 = mul nsw i32 %0, 3 509 %3 = add nsw i32 %2, -32 510 ret i32 %3 511 } 512 513 define i32 @test_lea_mul_offset_big(i32) { 514 ; GENERIC-LABEL: test_lea_mul_offset_big: 515 ; GENERIC: # %bb.0: 516 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 517 ; GENERIC-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] 518 ; GENERIC-NEXT: addl $10000, %eax # imm = 0x2710 519 ; GENERIC-NEXT: # sched: [1:0.33] 520 ; GENERIC-NEXT: retq # sched: [1:1.00] 521 ; 522 ; ATOM-LABEL: test_lea_mul_offset_big: 523 ; ATOM: # %bb.0: 524 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 525 ; ATOM-NEXT: leal 10000(%rdi,%rdi,8), %eax # sched: [1:1.00] 526 ; ATOM-NEXT: nop # sched: [1:0.50] 527 ; ATOM-NEXT: nop # sched: [1:0.50] 528 ; ATOM-NEXT: nop # sched: [1:0.50] 529 ; ATOM-NEXT: nop # sched: [1:0.50] 530 ; ATOM-NEXT: nop # sched: [1:0.50] 531 ; ATOM-NEXT: nop # sched: [1:0.50] 532 ; ATOM-NEXT: retq # sched: [79:39.50] 533 ; 534 ; SLM-LABEL: test_lea_mul_offset_big: 535 ; SLM: # %bb.0: 536 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 537 ; SLM-NEXT: leal 10000(%rdi,%rdi,8), %eax # sched: [1:1.00] 538 ; SLM-NEXT: retq # sched: [4:1.00] 539 ; 540 ; SANDY-LABEL: test_lea_mul_offset_big: 541 ; SANDY: # %bb.0: 542 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 543 ; SANDY-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] 544 ; SANDY-NEXT: addl $10000, %eax # imm = 0x2710 545 ; SANDY-NEXT: # sched: [1:0.33] 546 ; SANDY-NEXT: retq # sched: [1:1.00] 547 ; 548 ; HASWELL-LABEL: test_lea_mul_offset_big: 549 ; HASWELL: # %bb.0: 550 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 551 ; HASWELL-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] 552 ; HASWELL-NEXT: addl $10000, %eax # imm = 0x2710 553 ; HASWELL-NEXT: # sched: [1:0.25] 554 ; HASWELL-NEXT: retq # sched: [7:1.00] 555 ; 556 ; BROADWELL-LABEL: test_lea_mul_offset_big: 557 ; BROADWELL: # %bb.0: 558 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 559 ; BROADWELL-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] 560 ; BROADWELL-NEXT: addl $10000, %eax # imm = 0x2710 561 ; BROADWELL-NEXT: # sched: [1:0.25] 562 ; BROADWELL-NEXT: retq # sched: [7:1.00] 563 ; 564 ; SKYLAKE-LABEL: test_lea_mul_offset_big: 565 ; SKYLAKE: # %bb.0: 566 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 567 ; SKYLAKE-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50] 568 ; SKYLAKE-NEXT: addl $10000, %eax # imm = 0x2710 569 ; SKYLAKE-NEXT: # sched: [1:0.25] 570 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 571 ; 572 ; BTVER2-LABEL: test_lea_mul_offset_big: 573 ; BTVER2: # %bb.0: 574 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 575 ; BTVER2-NEXT: leal 10000(%rdi,%rdi,8), %eax # sched: [2:1.00] 576 ; BTVER2-NEXT: retq # sched: [4:1.00] 577 ; 578 ; ZNVER1-LABEL: test_lea_mul_offset_big: 579 ; ZNVER1: # %bb.0: 580 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 581 ; ZNVER1-NEXT: leal 10000(%rdi,%rdi,8), %eax # sched: [1:0.25] 582 ; ZNVER1-NEXT: retq # sched: [1:0.50] 583 %2 = mul nsw i32 %0, 9 584 %3 = add nsw i32 %2, 10000 585 ret i32 %3 586 } 587 588 define i32 @test_lea_add_scale(i32, i32) { 589 ; GENERIC-LABEL: test_lea_add_scale: 590 ; GENERIC: # %bb.0: 591 ; GENERIC-NEXT: # kill: def $esi killed $esi def $rsi 592 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 593 ; GENERIC-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.50] 594 ; GENERIC-NEXT: retq # sched: [1:1.00] 595 ; 596 ; ATOM-LABEL: test_lea_add_scale: 597 ; ATOM: # %bb.0: 598 ; ATOM-NEXT: # kill: def $esi killed $esi def $rsi 599 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 600 ; ATOM-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:1.00] 601 ; ATOM-NEXT: nop # sched: [1:0.50] 602 ; ATOM-NEXT: nop # sched: [1:0.50] 603 ; ATOM-NEXT: nop # sched: [1:0.50] 604 ; ATOM-NEXT: nop # sched: [1:0.50] 605 ; ATOM-NEXT: nop # sched: [1:0.50] 606 ; ATOM-NEXT: nop # sched: [1:0.50] 607 ; ATOM-NEXT: retq # sched: [79:39.50] 608 ; 609 ; SLM-LABEL: test_lea_add_scale: 610 ; SLM: # %bb.0: 611 ; SLM-NEXT: # kill: def $esi killed $esi def $rsi 612 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 613 ; SLM-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:1.00] 614 ; SLM-NEXT: retq # sched: [4:1.00] 615 ; 616 ; SANDY-LABEL: test_lea_add_scale: 617 ; SANDY: # %bb.0: 618 ; SANDY-NEXT: # kill: def $esi killed $esi def $rsi 619 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 620 ; SANDY-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.50] 621 ; SANDY-NEXT: retq # sched: [1:1.00] 622 ; 623 ; HASWELL-LABEL: test_lea_add_scale: 624 ; HASWELL: # %bb.0: 625 ; HASWELL-NEXT: # kill: def $esi killed $esi def $rsi 626 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 627 ; HASWELL-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.50] 628 ; HASWELL-NEXT: retq # sched: [7:1.00] 629 ; 630 ; BROADWELL-LABEL: test_lea_add_scale: 631 ; BROADWELL: # %bb.0: 632 ; BROADWELL-NEXT: # kill: def $esi killed $esi def $rsi 633 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 634 ; BROADWELL-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.50] 635 ; BROADWELL-NEXT: retq # sched: [7:1.00] 636 ; 637 ; SKYLAKE-LABEL: test_lea_add_scale: 638 ; SKYLAKE: # %bb.0: 639 ; SKYLAKE-NEXT: # kill: def $esi killed $esi def $rsi 640 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 641 ; SKYLAKE-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.50] 642 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 643 ; 644 ; BTVER2-LABEL: test_lea_add_scale: 645 ; BTVER2: # %bb.0: 646 ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi 647 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 648 ; BTVER2-NEXT: leal (%rdi,%rsi,2), %eax # sched: [2:1.00] 649 ; BTVER2-NEXT: retq # sched: [4:1.00] 650 ; 651 ; ZNVER1-LABEL: test_lea_add_scale: 652 ; ZNVER1: # %bb.0: 653 ; ZNVER1-NEXT: # kill: def $esi killed $esi def $rsi 654 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 655 ; ZNVER1-NEXT: leal (%rdi,%rsi,2), %eax # sched: [1:0.25] 656 ; ZNVER1-NEXT: retq # sched: [1:0.50] 657 %3 = shl i32 %1, 1 658 %4 = add nsw i32 %3, %0 659 ret i32 %4 660 } 661 662 define i32 @test_lea_add_scale_offset(i32, i32) { 663 ; GENERIC-LABEL: test_lea_add_scale_offset: 664 ; GENERIC: # %bb.0: 665 ; GENERIC-NEXT: # kill: def $esi killed $esi def $rsi 666 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 667 ; GENERIC-NEXT: leal (%rdi,%rsi,4), %eax # sched: [1:0.50] 668 ; GENERIC-NEXT: addl $96, %eax # sched: [1:0.33] 669 ; GENERIC-NEXT: retq # sched: [1:1.00] 670 ; 671 ; ATOM-LABEL: test_lea_add_scale_offset: 672 ; ATOM: # %bb.0: 673 ; ATOM-NEXT: # kill: def $esi killed $esi def $rsi 674 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 675 ; ATOM-NEXT: leal 96(%rdi,%rsi,4), %eax # sched: [1:1.00] 676 ; ATOM-NEXT: nop # sched: [1:0.50] 677 ; ATOM-NEXT: nop # sched: [1:0.50] 678 ; ATOM-NEXT: nop # sched: [1:0.50] 679 ; ATOM-NEXT: nop # sched: [1:0.50] 680 ; ATOM-NEXT: nop # sched: [1:0.50] 681 ; ATOM-NEXT: nop # sched: [1:0.50] 682 ; ATOM-NEXT: retq # sched: [79:39.50] 683 ; 684 ; SLM-LABEL: test_lea_add_scale_offset: 685 ; SLM: # %bb.0: 686 ; SLM-NEXT: # kill: def $esi killed $esi def $rsi 687 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 688 ; SLM-NEXT: leal 96(%rdi,%rsi,4), %eax # sched: [1:1.00] 689 ; SLM-NEXT: retq # sched: [4:1.00] 690 ; 691 ; SANDY-LABEL: test_lea_add_scale_offset: 692 ; SANDY: # %bb.0: 693 ; SANDY-NEXT: # kill: def $esi killed $esi def $rsi 694 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 695 ; SANDY-NEXT: leal (%rdi,%rsi,4), %eax # sched: [1:0.50] 696 ; SANDY-NEXT: addl $96, %eax # sched: [1:0.33] 697 ; SANDY-NEXT: retq # sched: [1:1.00] 698 ; 699 ; HASWELL-LABEL: test_lea_add_scale_offset: 700 ; HASWELL: # %bb.0: 701 ; HASWELL-NEXT: # kill: def $esi killed $esi def $rsi 702 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 703 ; HASWELL-NEXT: leal (%rdi,%rsi,4), %eax # sched: [1:0.50] 704 ; HASWELL-NEXT: addl $96, %eax # sched: [1:0.25] 705 ; HASWELL-NEXT: retq # sched: [7:1.00] 706 ; 707 ; BROADWELL-LABEL: test_lea_add_scale_offset: 708 ; BROADWELL: # %bb.0: 709 ; BROADWELL-NEXT: # kill: def $esi killed $esi def $rsi 710 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 711 ; BROADWELL-NEXT: leal (%rdi,%rsi,4), %eax # sched: [1:0.50] 712 ; BROADWELL-NEXT: addl $96, %eax # sched: [1:0.25] 713 ; BROADWELL-NEXT: retq # sched: [7:1.00] 714 ; 715 ; SKYLAKE-LABEL: test_lea_add_scale_offset: 716 ; SKYLAKE: # %bb.0: 717 ; SKYLAKE-NEXT: # kill: def $esi killed $esi def $rsi 718 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 719 ; SKYLAKE-NEXT: leal (%rdi,%rsi,4), %eax # sched: [1:0.50] 720 ; SKYLAKE-NEXT: addl $96, %eax # sched: [1:0.25] 721 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 722 ; 723 ; BTVER2-LABEL: test_lea_add_scale_offset: 724 ; BTVER2: # %bb.0: 725 ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi 726 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 727 ; BTVER2-NEXT: leal 96(%rdi,%rsi,4), %eax # sched: [2:1.00] 728 ; BTVER2-NEXT: retq # sched: [4:1.00] 729 ; 730 ; ZNVER1-LABEL: test_lea_add_scale_offset: 731 ; ZNVER1: # %bb.0: 732 ; ZNVER1-NEXT: # kill: def $esi killed $esi def $rsi 733 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 734 ; ZNVER1-NEXT: leal 96(%rdi,%rsi,4), %eax # sched: [1:0.25] 735 ; ZNVER1-NEXT: retq # sched: [1:0.50] 736 %3 = shl i32 %1, 2 737 %4 = add i32 %0, 96 738 %5 = add i32 %4, %3 739 ret i32 %5 740 } 741 742 define i32 @test_lea_add_scale_offset_big(i32, i32) { 743 ; GENERIC-LABEL: test_lea_add_scale_offset_big: 744 ; GENERIC: # %bb.0: 745 ; GENERIC-NEXT: # kill: def $esi killed $esi def $rsi 746 ; GENERIC-NEXT: # kill: def $edi killed $edi def $rdi 747 ; GENERIC-NEXT: leal (%rdi,%rsi,8), %eax # sched: [1:0.50] 748 ; GENERIC-NEXT: addl $-1200, %eax # imm = 0xFB50 749 ; GENERIC-NEXT: # sched: [1:0.33] 750 ; GENERIC-NEXT: retq # sched: [1:1.00] 751 ; 752 ; ATOM-LABEL: test_lea_add_scale_offset_big: 753 ; ATOM: # %bb.0: 754 ; ATOM-NEXT: # kill: def $esi killed $esi def $rsi 755 ; ATOM-NEXT: # kill: def $edi killed $edi def $rdi 756 ; ATOM-NEXT: leal -1200(%rdi,%rsi,8), %eax # sched: [1:1.00] 757 ; ATOM-NEXT: nop # sched: [1:0.50] 758 ; ATOM-NEXT: nop # sched: [1:0.50] 759 ; ATOM-NEXT: nop # sched: [1:0.50] 760 ; ATOM-NEXT: nop # sched: [1:0.50] 761 ; ATOM-NEXT: nop # sched: [1:0.50] 762 ; ATOM-NEXT: nop # sched: [1:0.50] 763 ; ATOM-NEXT: retq # sched: [79:39.50] 764 ; 765 ; SLM-LABEL: test_lea_add_scale_offset_big: 766 ; SLM: # %bb.0: 767 ; SLM-NEXT: # kill: def $esi killed $esi def $rsi 768 ; SLM-NEXT: # kill: def $edi killed $edi def $rdi 769 ; SLM-NEXT: leal -1200(%rdi,%rsi,8), %eax # sched: [1:1.00] 770 ; SLM-NEXT: retq # sched: [4:1.00] 771 ; 772 ; SANDY-LABEL: test_lea_add_scale_offset_big: 773 ; SANDY: # %bb.0: 774 ; SANDY-NEXT: # kill: def $esi killed $esi def $rsi 775 ; SANDY-NEXT: # kill: def $edi killed $edi def $rdi 776 ; SANDY-NEXT: leal (%rdi,%rsi,8), %eax # sched: [1:0.50] 777 ; SANDY-NEXT: addl $-1200, %eax # imm = 0xFB50 778 ; SANDY-NEXT: # sched: [1:0.33] 779 ; SANDY-NEXT: retq # sched: [1:1.00] 780 ; 781 ; HASWELL-LABEL: test_lea_add_scale_offset_big: 782 ; HASWELL: # %bb.0: 783 ; HASWELL-NEXT: # kill: def $esi killed $esi def $rsi 784 ; HASWELL-NEXT: # kill: def $edi killed $edi def $rdi 785 ; HASWELL-NEXT: leal (%rdi,%rsi,8), %eax # sched: [1:0.50] 786 ; HASWELL-NEXT: addl $-1200, %eax # imm = 0xFB50 787 ; HASWELL-NEXT: # sched: [1:0.25] 788 ; HASWELL-NEXT: retq # sched: [7:1.00] 789 ; 790 ; BROADWELL-LABEL: test_lea_add_scale_offset_big: 791 ; BROADWELL: # %bb.0: 792 ; BROADWELL-NEXT: # kill: def $esi killed $esi def $rsi 793 ; BROADWELL-NEXT: # kill: def $edi killed $edi def $rdi 794 ; BROADWELL-NEXT: leal (%rdi,%rsi,8), %eax # sched: [1:0.50] 795 ; BROADWELL-NEXT: addl $-1200, %eax # imm = 0xFB50 796 ; BROADWELL-NEXT: # sched: [1:0.25] 797 ; BROADWELL-NEXT: retq # sched: [7:1.00] 798 ; 799 ; SKYLAKE-LABEL: test_lea_add_scale_offset_big: 800 ; SKYLAKE: # %bb.0: 801 ; SKYLAKE-NEXT: # kill: def $esi killed $esi def $rsi 802 ; SKYLAKE-NEXT: # kill: def $edi killed $edi def $rdi 803 ; SKYLAKE-NEXT: leal (%rdi,%rsi,8), %eax # sched: [1:0.50] 804 ; SKYLAKE-NEXT: addl $-1200, %eax # imm = 0xFB50 805 ; SKYLAKE-NEXT: # sched: [1:0.25] 806 ; SKYLAKE-NEXT: retq # sched: [7:1.00] 807 ; 808 ; BTVER2-LABEL: test_lea_add_scale_offset_big: 809 ; BTVER2: # %bb.0: 810 ; BTVER2-NEXT: # kill: def $esi killed $esi def $rsi 811 ; BTVER2-NEXT: # kill: def $edi killed $edi def $rdi 812 ; BTVER2-NEXT: leal -1200(%rdi,%rsi,8), %eax # sched: [2:1.00] 813 ; BTVER2-NEXT: retq # sched: [4:1.00] 814 ; 815 ; ZNVER1-LABEL: test_lea_add_scale_offset_big: 816 ; ZNVER1: # %bb.0: 817 ; ZNVER1-NEXT: # kill: def $esi killed $esi def $rsi 818 ; ZNVER1-NEXT: # kill: def $edi killed $edi def $rdi 819 ; ZNVER1-NEXT: leal -1200(%rdi,%rsi,8), %eax # sched: [1:0.25] 820 ; ZNVER1-NEXT: retq # sched: [1:0.50] 821 %3 = shl i32 %1, 3 822 %4 = add i32 %0, -1200 823 %5 = add i32 %4, %3 824 ret i32 %5 825 } 826