1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86 3 4; Incremental updates of the instruction depths should be enough for this test 5; case. 6; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=haswell -machine-combiner-inc-threshold=0| FileCheck %s --check-prefix=X64-HSW 7 8; Function Attrs: norecurse nounwind readnone uwtable 9define i32 @mult(i32, i32) local_unnamed_addr #0 { 10; X86-LABEL: mult: 11; X86: # %bb.0: 12; X86-NEXT: pushl %esi 13; X86-NEXT: .cfi_def_cfa_offset 8 14; X86-NEXT: .cfi_offset %esi, -8 15; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 16; X86-NEXT: cmpl $1, %edx 17; X86-NEXT: movl $1, %eax 18; X86-NEXT: movl $1, %esi 19; X86-NEXT: jg .LBB0_2 20; X86-NEXT: # %bb.1: 21; X86-NEXT: movl %edx, %esi 22; X86-NEXT: .LBB0_2: 23; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 24; X86-NEXT: testl %edx, %edx 25; X86-NEXT: je .LBB0_4 26; X86-NEXT: # %bb.3: 27; X86-NEXT: movl %esi, %eax 28; X86-NEXT: .LBB0_4: 29; X86-NEXT: decl %ecx 30; X86-NEXT: cmpl $31, %ecx 31; X86-NEXT: ja .LBB0_7 32; X86-NEXT: # %bb.5: 33; X86-NEXT: jmpl *.LJTI0_0(,%ecx,4) 34; X86-NEXT: .LBB0_6: 35; X86-NEXT: addl %eax, %eax 36; X86-NEXT: popl %esi 37; X86-NEXT: .cfi_def_cfa_offset 4 38; X86-NEXT: retl 39; X86-NEXT: .LBB0_7: 40; X86-NEXT: .cfi_def_cfa_offset 8 41; X86-NEXT: xorl %eax, %eax 42; X86-NEXT: .LBB0_8: 43; X86-NEXT: popl %esi 44; X86-NEXT: .cfi_def_cfa_offset 4 45; X86-NEXT: retl 46; X86-NEXT: .LBB0_10: 47; X86-NEXT: .cfi_def_cfa_offset 8 48; X86-NEXT: shll $2, %eax 49; X86-NEXT: popl %esi 50; X86-NEXT: .cfi_def_cfa_offset 4 51; X86-NEXT: retl 52; X86-NEXT: .LBB0_12: 53; X86-NEXT: .cfi_def_cfa_offset 8 54; X86-NEXT: addl %eax, %eax 55; X86-NEXT: jmp .LBB0_9 56; X86-NEXT: .LBB0_13: 57; X86-NEXT: leal (,%eax,8), %ecx 58; X86-NEXT: jmp .LBB0_41 59; X86-NEXT: .LBB0_14: 60; X86-NEXT: shll $3, %eax 61; X86-NEXT: popl %esi 62; X86-NEXT: .cfi_def_cfa_offset 4 63; X86-NEXT: retl 64; X86-NEXT: .LBB0_16: 65; X86-NEXT: .cfi_def_cfa_offset 8 66; X86-NEXT: addl %eax, %eax 67; X86-NEXT: jmp .LBB0_11 68; X86-NEXT: .LBB0_17: 69; X86-NEXT: leal (%eax,%eax,4), %ecx 70; X86-NEXT: jmp .LBB0_18 71; X86-NEXT: .LBB0_19: 72; X86-NEXT: shll $2, %eax 73; X86-NEXT: jmp .LBB0_9 74; X86-NEXT: .LBB0_20: 75; X86-NEXT: leal (%eax,%eax,2), %ecx 76; X86-NEXT: jmp .LBB0_21 77; X86-NEXT: .LBB0_22: 78; X86-NEXT: movl %eax, %ecx 79; X86-NEXT: shll $4, %ecx 80; X86-NEXT: subl %eax, %ecx 81; X86-NEXT: jmp .LBB0_41 82; X86-NEXT: .LBB0_23: 83; X86-NEXT: leal (%eax,%eax,4), %eax 84; X86-NEXT: jmp .LBB0_9 85; X86-NEXT: .LBB0_24: 86; X86-NEXT: shll $4, %eax 87; X86-NEXT: popl %esi 88; X86-NEXT: .cfi_def_cfa_offset 4 89; X86-NEXT: retl 90; X86-NEXT: .LBB0_25: 91; X86-NEXT: .cfi_def_cfa_offset 8 92; X86-NEXT: movl %eax, %ecx 93; X86-NEXT: shll $4, %ecx 94; X86-NEXT: jmp .LBB0_26 95; X86-NEXT: .LBB0_27: 96; X86-NEXT: addl %eax, %eax 97; X86-NEXT: .LBB0_15: 98; X86-NEXT: leal (%eax,%eax,8), %eax 99; X86-NEXT: popl %esi 100; X86-NEXT: .cfi_def_cfa_offset 4 101; X86-NEXT: retl 102; X86-NEXT: .LBB0_28: 103; X86-NEXT: .cfi_def_cfa_offset 8 104; X86-NEXT: leal (%eax,%eax,8), %ecx 105; X86-NEXT: .LBB0_18: 106; X86-NEXT: leal (%eax,%ecx,2), %eax 107; X86-NEXT: popl %esi 108; X86-NEXT: .cfi_def_cfa_offset 4 109; X86-NEXT: retl 110; X86-NEXT: .LBB0_29: 111; X86-NEXT: .cfi_def_cfa_offset 8 112; X86-NEXT: shll $2, %eax 113; X86-NEXT: jmp .LBB0_11 114; X86-NEXT: .LBB0_30: 115; X86-NEXT: leal (%eax,%eax,4), %ecx 116; X86-NEXT: .LBB0_21: 117; X86-NEXT: leal (%eax,%ecx,4), %eax 118; X86-NEXT: popl %esi 119; X86-NEXT: .cfi_def_cfa_offset 4 120; X86-NEXT: retl 121; X86-NEXT: .LBB0_31: 122; X86-NEXT: .cfi_def_cfa_offset 8 123; X86-NEXT: leal (%eax,%eax,4), %ecx 124; X86-NEXT: leal (%eax,%ecx,4), %ecx 125; X86-NEXT: jmp .LBB0_26 126; X86-NEXT: .LBB0_32: 127; X86-NEXT: leal (%eax,%eax,2), %ecx 128; X86-NEXT: shll $3, %ecx 129; X86-NEXT: jmp .LBB0_41 130; X86-NEXT: .LBB0_33: 131; X86-NEXT: shll $3, %eax 132; X86-NEXT: jmp .LBB0_9 133; X86-NEXT: .LBB0_34: 134; X86-NEXT: leal (%eax,%eax,4), %eax 135; X86-NEXT: .LBB0_11: 136; X86-NEXT: leal (%eax,%eax,4), %eax 137; X86-NEXT: popl %esi 138; X86-NEXT: .cfi_def_cfa_offset 4 139; X86-NEXT: retl 140; X86-NEXT: .LBB0_35: 141; X86-NEXT: .cfi_def_cfa_offset 8 142; X86-NEXT: leal (%eax,%eax,4), %ecx 143; X86-NEXT: leal (%ecx,%ecx,4), %ecx 144; X86-NEXT: jmp .LBB0_26 145; X86-NEXT: .LBB0_36: 146; X86-NEXT: leal (%eax,%eax,8), %eax 147; X86-NEXT: .LBB0_9: 148; X86-NEXT: leal (%eax,%eax,2), %eax 149; X86-NEXT: popl %esi 150; X86-NEXT: .cfi_def_cfa_offset 4 151; X86-NEXT: retl 152; X86-NEXT: .LBB0_37: 153; X86-NEXT: .cfi_def_cfa_offset 8 154; X86-NEXT: leal (%eax,%eax,8), %ecx 155; X86-NEXT: leal (%ecx,%ecx,2), %ecx 156; X86-NEXT: jmp .LBB0_26 157; X86-NEXT: .LBB0_38: 158; X86-NEXT: leal (%eax,%eax,8), %ecx 159; X86-NEXT: leal (%ecx,%ecx,2), %ecx 160; X86-NEXT: addl %eax, %ecx 161; X86-NEXT: .LBB0_26: 162; X86-NEXT: addl %ecx, %eax 163; X86-NEXT: popl %esi 164; X86-NEXT: .cfi_def_cfa_offset 4 165; X86-NEXT: retl 166; X86-NEXT: .LBB0_39: 167; X86-NEXT: .cfi_def_cfa_offset 8 168; X86-NEXT: movl %eax, %ecx 169; X86-NEXT: shll $5, %ecx 170; X86-NEXT: subl %eax, %ecx 171; X86-NEXT: jmp .LBB0_41 172; X86-NEXT: .LBB0_40: 173; X86-NEXT: movl %eax, %ecx 174; X86-NEXT: shll $5, %ecx 175; X86-NEXT: .LBB0_41: 176; X86-NEXT: subl %eax, %ecx 177; X86-NEXT: movl %ecx, %eax 178; X86-NEXT: popl %esi 179; X86-NEXT: .cfi_def_cfa_offset 4 180; X86-NEXT: retl 181; X86-NEXT: .LBB0_42: 182; X86-NEXT: .cfi_def_cfa_offset 8 183; X86-NEXT: shll $5, %eax 184; X86-NEXT: popl %esi 185; X86-NEXT: .cfi_def_cfa_offset 4 186; X86-NEXT: retl 187; 188; X64-HSW-LABEL: mult: 189; X64-HSW: # %bb.0: 190; X64-HSW-NEXT: # kill: def $edi killed $edi def $rdi 191; X64-HSW-NEXT: cmpl $1, %esi 192; X64-HSW-NEXT: movl $1, %ecx 193; X64-HSW-NEXT: movl %esi, %eax 194; X64-HSW-NEXT: cmovgl %ecx, %eax 195; X64-HSW-NEXT: testl %esi, %esi 196; X64-HSW-NEXT: cmovel %ecx, %eax 197; X64-HSW-NEXT: decl %edi 198; X64-HSW-NEXT: cmpl $31, %edi 199; X64-HSW-NEXT: ja .LBB0_3 200; X64-HSW-NEXT: # %bb.1: 201; X64-HSW-NEXT: jmpq *.LJTI0_0(,%rdi,8) 202; X64-HSW-NEXT: .LBB0_2: 203; X64-HSW-NEXT: addl %eax, %eax 204; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 205; X64-HSW-NEXT: retq 206; X64-HSW-NEXT: .LBB0_3: 207; X64-HSW-NEXT: xorl %eax, %eax 208; X64-HSW-NEXT: .LBB0_4: 209; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 210; X64-HSW-NEXT: retq 211; X64-HSW-NEXT: .LBB0_6: 212; X64-HSW-NEXT: shll $2, %eax 213; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 214; X64-HSW-NEXT: retq 215; X64-HSW-NEXT: .LBB0_8: 216; X64-HSW-NEXT: addl %eax, %eax 217; X64-HSW-NEXT: .LBB0_5: 218; X64-HSW-NEXT: leal (%rax,%rax,2), %eax 219; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 220; X64-HSW-NEXT: retq 221; X64-HSW-NEXT: .LBB0_9: 222; X64-HSW-NEXT: leal (,%rax,8), %ecx 223; X64-HSW-NEXT: jmp .LBB0_37 224; X64-HSW-NEXT: .LBB0_10: 225; X64-HSW-NEXT: shll $3, %eax 226; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 227; X64-HSW-NEXT: retq 228; X64-HSW-NEXT: .LBB0_12: 229; X64-HSW-NEXT: addl %eax, %eax 230; X64-HSW-NEXT: .LBB0_7: 231; X64-HSW-NEXT: leal (%rax,%rax,4), %eax 232; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 233; X64-HSW-NEXT: retq 234; X64-HSW-NEXT: .LBB0_13: 235; X64-HSW-NEXT: leal (%rax,%rax,4), %ecx 236; X64-HSW-NEXT: leal (%rax,%rcx,2), %eax 237; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 238; X64-HSW-NEXT: retq 239; X64-HSW-NEXT: .LBB0_15: 240; X64-HSW-NEXT: shll $2, %eax 241; X64-HSW-NEXT: leal (%rax,%rax,2), %eax 242; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 243; X64-HSW-NEXT: retq 244; X64-HSW-NEXT: .LBB0_16: 245; X64-HSW-NEXT: leal (%rax,%rax,2), %ecx 246; X64-HSW-NEXT: leal (%rax,%rcx,4), %eax 247; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 248; X64-HSW-NEXT: retq 249; X64-HSW-NEXT: .LBB0_18: 250; X64-HSW-NEXT: movl %eax, %ecx 251; X64-HSW-NEXT: shll $4, %ecx 252; X64-HSW-NEXT: subl %eax, %ecx 253; X64-HSW-NEXT: jmp .LBB0_37 254; X64-HSW-NEXT: .LBB0_19: 255; X64-HSW-NEXT: leal (%rax,%rax,4), %eax 256; X64-HSW-NEXT: leal (%rax,%rax,2), %eax 257; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 258; X64-HSW-NEXT: retq 259; X64-HSW-NEXT: .LBB0_20: 260; X64-HSW-NEXT: shll $4, %eax 261; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 262; X64-HSW-NEXT: retq 263; X64-HSW-NEXT: .LBB0_21: 264; X64-HSW-NEXT: movl %eax, %ecx 265; X64-HSW-NEXT: shll $4, %ecx 266; X64-HSW-NEXT: jmp .LBB0_34 267; X64-HSW-NEXT: .LBB0_22: 268; X64-HSW-NEXT: addl %eax, %eax 269; X64-HSW-NEXT: .LBB0_11: 270; X64-HSW-NEXT: leal (%rax,%rax,8), %eax 271; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 272; X64-HSW-NEXT: retq 273; X64-HSW-NEXT: .LBB0_23: 274; X64-HSW-NEXT: leal (%rax,%rax,8), %ecx 275; X64-HSW-NEXT: leal (%rax,%rcx,2), %eax 276; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 277; X64-HSW-NEXT: retq 278; X64-HSW-NEXT: .LBB0_24: 279; X64-HSW-NEXT: shll $2, %eax 280; X64-HSW-NEXT: leal (%rax,%rax,4), %eax 281; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 282; X64-HSW-NEXT: retq 283; X64-HSW-NEXT: .LBB0_25: 284; X64-HSW-NEXT: leal (%rax,%rax,4), %ecx 285; X64-HSW-NEXT: leal (%rax,%rcx,4), %eax 286; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 287; X64-HSW-NEXT: retq 288; X64-HSW-NEXT: .LBB0_26: 289; X64-HSW-NEXT: leal (%rax,%rax,4), %ecx 290; X64-HSW-NEXT: leal (%rax,%rcx,4), %ecx 291; X64-HSW-NEXT: jmp .LBB0_34 292; X64-HSW-NEXT: .LBB0_27: 293; X64-HSW-NEXT: leal (%rax,%rax,2), %ecx 294; X64-HSW-NEXT: shll $3, %ecx 295; X64-HSW-NEXT: jmp .LBB0_37 296; X64-HSW-NEXT: .LBB0_28: 297; X64-HSW-NEXT: shll $3, %eax 298; X64-HSW-NEXT: leal (%rax,%rax,2), %eax 299; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 300; X64-HSW-NEXT: retq 301; X64-HSW-NEXT: .LBB0_29: 302; X64-HSW-NEXT: leal (%rax,%rax,4), %eax 303; X64-HSW-NEXT: leal (%rax,%rax,4), %eax 304; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 305; X64-HSW-NEXT: retq 306; X64-HSW-NEXT: .LBB0_30: 307; X64-HSW-NEXT: leal (%rax,%rax,4), %ecx 308; X64-HSW-NEXT: leal (%rcx,%rcx,4), %ecx 309; X64-HSW-NEXT: jmp .LBB0_34 310; X64-HSW-NEXT: .LBB0_31: 311; X64-HSW-NEXT: leal (%rax,%rax,8), %eax 312; X64-HSW-NEXT: leal (%rax,%rax,2), %eax 313; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 314; X64-HSW-NEXT: retq 315; X64-HSW-NEXT: .LBB0_32: 316; X64-HSW-NEXT: leal (%rax,%rax,8), %ecx 317; X64-HSW-NEXT: leal (%rcx,%rcx,2), %ecx 318; X64-HSW-NEXT: jmp .LBB0_34 319; X64-HSW-NEXT: .LBB0_33: 320; X64-HSW-NEXT: leal (%rax,%rax,8), %ecx 321; X64-HSW-NEXT: leal (%rcx,%rcx,2), %ecx 322; X64-HSW-NEXT: addl %eax, %ecx 323; X64-HSW-NEXT: .LBB0_34: 324; X64-HSW-NEXT: addl %eax, %ecx 325; X64-HSW-NEXT: movl %ecx, %eax 326; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 327; X64-HSW-NEXT: retq 328; X64-HSW-NEXT: .LBB0_35: 329; X64-HSW-NEXT: movl %eax, %ecx 330; X64-HSW-NEXT: shll $5, %ecx 331; X64-HSW-NEXT: subl %eax, %ecx 332; X64-HSW-NEXT: jmp .LBB0_37 333; X64-HSW-NEXT: .LBB0_36: 334; X64-HSW-NEXT: movl %eax, %ecx 335; X64-HSW-NEXT: shll $5, %ecx 336; X64-HSW-NEXT: .LBB0_37: 337; X64-HSW-NEXT: subl %eax, %ecx 338; X64-HSW-NEXT: movl %ecx, %eax 339; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 340; X64-HSW-NEXT: retq 341; X64-HSW-NEXT: .LBB0_39: 342; X64-HSW-NEXT: shll $5, %eax 343; X64-HSW-NEXT: # kill: def $eax killed $eax killed $rax 344; X64-HSW-NEXT: retq 345 %3 = icmp eq i32 %1, 0 346 %4 = icmp sgt i32 %1, 1 347 %5 = or i1 %3, %4 348 %6 = select i1 %5, i32 1, i32 %1 349 switch i32 %0, label %69 [ 350 i32 1, label %70 351 i32 2, label %7 352 i32 3, label %9 353 i32 4, label %11 354 i32 5, label %13 355 i32 6, label %15 356 i32 7, label %17 357 i32 8, label %19 358 i32 9, label %21 359 i32 10, label %23 360 i32 11, label %25 361 i32 12, label %27 362 i32 13, label %29 363 i32 14, label %31 364 i32 15, label %33 365 i32 16, label %35 366 i32 17, label %37 367 i32 18, label %39 368 i32 19, label %41 369 i32 20, label %43 370 i32 21, label %45 371 i32 22, label %47 372 i32 23, label %49 373 i32 24, label %51 374 i32 25, label %53 375 i32 26, label %55 376 i32 27, label %57 377 i32 28, label %59 378 i32 29, label %61 379 i32 30, label %63 380 i32 31, label %65 381 i32 32, label %67 382 ] 383 384; <label>:7: ; preds = %2 385 %8 = shl nsw i32 %6, 1 386 br label %70 387 388; <label>:9: ; preds = %2 389 %10 = mul nsw i32 %6, 3 390 br label %70 391 392; <label>:11: ; preds = %2 393 %12 = shl nsw i32 %6, 2 394 br label %70 395 396; <label>:13: ; preds = %2 397 %14 = mul nsw i32 %6, 5 398 br label %70 399 400; <label>:15: ; preds = %2 401 %16 = mul nsw i32 %6, 6 402 br label %70 403 404; <label>:17: ; preds = %2 405 %18 = mul nsw i32 %6, 7 406 br label %70 407 408; <label>:19: ; preds = %2 409 %20 = shl nsw i32 %6, 3 410 br label %70 411 412; <label>:21: ; preds = %2 413 %22 = mul nsw i32 %6, 9 414 br label %70 415 416; <label>:23: ; preds = %2 417 %24 = mul nsw i32 %6, 10 418 br label %70 419 420; <label>:25: ; preds = %2 421 %26 = mul nsw i32 %6, 11 422 br label %70 423 424; <label>:27: ; preds = %2 425 %28 = mul nsw i32 %6, 12 426 br label %70 427 428; <label>:29: ; preds = %2 429 %30 = mul nsw i32 %6, 13 430 br label %70 431 432; <label>:31: ; preds = %2 433 %32 = mul nsw i32 %6, 14 434 br label %70 435 436; <label>:33: ; preds = %2 437 %34 = mul nsw i32 %6, 15 438 br label %70 439 440; <label>:35: ; preds = %2 441 %36 = shl nsw i32 %6, 4 442 br label %70 443 444; <label>:37: ; preds = %2 445 %38 = mul nsw i32 %6, 17 446 br label %70 447 448; <label>:39: ; preds = %2 449 %40 = mul nsw i32 %6, 18 450 br label %70 451 452; <label>:41: ; preds = %2 453 %42 = mul nsw i32 %6, 19 454 br label %70 455 456; <label>:43: ; preds = %2 457 %44 = mul nsw i32 %6, 20 458 br label %70 459 460; <label>:45: ; preds = %2 461 %46 = mul nsw i32 %6, 21 462 br label %70 463 464; <label>:47: ; preds = %2 465 %48 = mul nsw i32 %6, 22 466 br label %70 467 468; <label>:49: ; preds = %2 469 %50 = mul nsw i32 %6, 23 470 br label %70 471 472; <label>:51: ; preds = %2 473 %52 = mul nsw i32 %6, 24 474 br label %70 475 476; <label>:53: ; preds = %2 477 %54 = mul nsw i32 %6, 25 478 br label %70 479 480; <label>:55: ; preds = %2 481 %56 = mul nsw i32 %6, 26 482 br label %70 483 484; <label>:57: ; preds = %2 485 %58 = mul nsw i32 %6, 27 486 br label %70 487 488; <label>:59: ; preds = %2 489 %60 = mul nsw i32 %6, 28 490 br label %70 491 492; <label>:61: ; preds = %2 493 %62 = mul nsw i32 %6, 29 494 br label %70 495 496; <label>:63: ; preds = %2 497 %64 = mul nsw i32 %6, 30 498 br label %70 499 500; <label>:65: ; preds = %2 501 %66 = mul nsw i32 %6, 31 502 br label %70 503 504; <label>:67: ; preds = %2 505 %68 = shl nsw i32 %6, 5 506 br label %70 507 508; <label>:69: ; preds = %2 509 br label %70 510 511; <label>:70: ; preds = %2, %69, %67, %65, %63, %61, %59, %57, %55, %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7 512 %71 = phi i32 [ %8, %7 ], [ %10, %9 ], [ %12, %11 ], [ %14, %13 ], [ %16, %15 ], [ %18, %17 ], [ %20, %19 ], [ %22, %21 ], [ %24, %23 ], [ %26, %25 ], [ %28, %27 ], [ %30, %29 ], [ %32, %31 ], [ %34, %33 ], [ %36, %35 ], [ %38, %37 ], [ %40, %39 ], [ %42, %41 ], [ %44, %43 ], [ %46, %45 ], [ %48, %47 ], [ %50, %49 ], [ %52, %51 ], [ %54, %53 ], [ %56, %55 ], [ %58, %57 ], [ %60, %59 ], [ %62, %61 ], [ %64, %63 ], [ %66, %65 ], [ %68, %67 ], [ 0, %69 ], [ %6, %2 ] 513 ret i32 %71 514} 515 516; Function Attrs: norecurse nounwind readnone uwtable 517define i32 @foo() local_unnamed_addr #0 { 518; X86-LABEL: foo: 519; X86: # %bb.0: 520; X86-NEXT: pushl %ebx 521; X86-NEXT: .cfi_def_cfa_offset 8 522; X86-NEXT: pushl %edi 523; X86-NEXT: .cfi_def_cfa_offset 12 524; X86-NEXT: pushl %esi 525; X86-NEXT: .cfi_def_cfa_offset 16 526; X86-NEXT: .cfi_offset %esi, -16 527; X86-NEXT: .cfi_offset %edi, -12 528; X86-NEXT: .cfi_offset %ebx, -8 529; X86-NEXT: pushl $0 530; X86-NEXT: .cfi_adjust_cfa_offset 4 531; X86-NEXT: pushl $1 532; X86-NEXT: .cfi_adjust_cfa_offset 4 533; X86-NEXT: calll mult 534; X86-NEXT: addl $8, %esp 535; X86-NEXT: .cfi_adjust_cfa_offset -8 536; X86-NEXT: movl %eax, %esi 537; X86-NEXT: xorl $1, %esi 538; X86-NEXT: pushl $1 539; X86-NEXT: .cfi_adjust_cfa_offset 4 540; X86-NEXT: pushl $2 541; X86-NEXT: .cfi_adjust_cfa_offset 4 542; X86-NEXT: calll mult 543; X86-NEXT: addl $8, %esp 544; X86-NEXT: .cfi_adjust_cfa_offset -8 545; X86-NEXT: movl %eax, %edi 546; X86-NEXT: xorl $2, %edi 547; X86-NEXT: pushl $1 548; X86-NEXT: .cfi_adjust_cfa_offset 4 549; X86-NEXT: pushl $3 550; X86-NEXT: .cfi_adjust_cfa_offset 4 551; X86-NEXT: calll mult 552; X86-NEXT: addl $8, %esp 553; X86-NEXT: .cfi_adjust_cfa_offset -8 554; X86-NEXT: movl %eax, %ebx 555; X86-NEXT: xorl $3, %ebx 556; X86-NEXT: orl %edi, %ebx 557; X86-NEXT: pushl $2 558; X86-NEXT: .cfi_adjust_cfa_offset 4 559; X86-NEXT: pushl $4 560; X86-NEXT: .cfi_adjust_cfa_offset 4 561; X86-NEXT: calll mult 562; X86-NEXT: addl $8, %esp 563; X86-NEXT: .cfi_adjust_cfa_offset -8 564; X86-NEXT: movl %eax, %edi 565; X86-NEXT: xorl $4, %edi 566; X86-NEXT: orl %ebx, %edi 567; X86-NEXT: pushl $2 568; X86-NEXT: .cfi_adjust_cfa_offset 4 569; X86-NEXT: pushl $5 570; X86-NEXT: .cfi_adjust_cfa_offset 4 571; X86-NEXT: calll mult 572; X86-NEXT: addl $8, %esp 573; X86-NEXT: .cfi_adjust_cfa_offset -8 574; X86-NEXT: movl %eax, %ebx 575; X86-NEXT: xorl $5, %ebx 576; X86-NEXT: orl %edi, %ebx 577; X86-NEXT: pushl $3 578; X86-NEXT: .cfi_adjust_cfa_offset 4 579; X86-NEXT: pushl $6 580; X86-NEXT: .cfi_adjust_cfa_offset 4 581; X86-NEXT: calll mult 582; X86-NEXT: addl $8, %esp 583; X86-NEXT: .cfi_adjust_cfa_offset -8 584; X86-NEXT: movl %eax, %edi 585; X86-NEXT: xorl $6, %edi 586; X86-NEXT: orl %ebx, %edi 587; X86-NEXT: pushl $3 588; X86-NEXT: .cfi_adjust_cfa_offset 4 589; X86-NEXT: pushl $7 590; X86-NEXT: .cfi_adjust_cfa_offset 4 591; X86-NEXT: calll mult 592; X86-NEXT: addl $8, %esp 593; X86-NEXT: .cfi_adjust_cfa_offset -8 594; X86-NEXT: movl %eax, %ebx 595; X86-NEXT: xorl $7, %ebx 596; X86-NEXT: orl %edi, %ebx 597; X86-NEXT: pushl $4 598; X86-NEXT: .cfi_adjust_cfa_offset 4 599; X86-NEXT: pushl $8 600; X86-NEXT: .cfi_adjust_cfa_offset 4 601; X86-NEXT: calll mult 602; X86-NEXT: addl $8, %esp 603; X86-NEXT: .cfi_adjust_cfa_offset -8 604; X86-NEXT: movl %eax, %edi 605; X86-NEXT: xorl $8, %edi 606; X86-NEXT: orl %ebx, %edi 607; X86-NEXT: pushl $4 608; X86-NEXT: .cfi_adjust_cfa_offset 4 609; X86-NEXT: pushl $9 610; X86-NEXT: .cfi_adjust_cfa_offset 4 611; X86-NEXT: calll mult 612; X86-NEXT: addl $8, %esp 613; X86-NEXT: .cfi_adjust_cfa_offset -8 614; X86-NEXT: movl %eax, %ebx 615; X86-NEXT: xorl $9, %ebx 616; X86-NEXT: orl %edi, %ebx 617; X86-NEXT: pushl $5 618; X86-NEXT: .cfi_adjust_cfa_offset 4 619; X86-NEXT: pushl $10 620; X86-NEXT: .cfi_adjust_cfa_offset 4 621; X86-NEXT: calll mult 622; X86-NEXT: addl $8, %esp 623; X86-NEXT: .cfi_adjust_cfa_offset -8 624; X86-NEXT: movl %eax, %edi 625; X86-NEXT: xorl $10, %edi 626; X86-NEXT: orl %ebx, %edi 627; X86-NEXT: pushl $5 628; X86-NEXT: .cfi_adjust_cfa_offset 4 629; X86-NEXT: pushl $11 630; X86-NEXT: .cfi_adjust_cfa_offset 4 631; X86-NEXT: calll mult 632; X86-NEXT: addl $8, %esp 633; X86-NEXT: .cfi_adjust_cfa_offset -8 634; X86-NEXT: movl %eax, %ebx 635; X86-NEXT: xorl $11, %ebx 636; X86-NEXT: orl %edi, %ebx 637; X86-NEXT: pushl $6 638; X86-NEXT: .cfi_adjust_cfa_offset 4 639; X86-NEXT: pushl $12 640; X86-NEXT: .cfi_adjust_cfa_offset 4 641; X86-NEXT: calll mult 642; X86-NEXT: addl $8, %esp 643; X86-NEXT: .cfi_adjust_cfa_offset -8 644; X86-NEXT: movl %eax, %edi 645; X86-NEXT: xorl $12, %edi 646; X86-NEXT: orl %ebx, %edi 647; X86-NEXT: pushl $6 648; X86-NEXT: .cfi_adjust_cfa_offset 4 649; X86-NEXT: pushl $13 650; X86-NEXT: .cfi_adjust_cfa_offset 4 651; X86-NEXT: calll mult 652; X86-NEXT: addl $8, %esp 653; X86-NEXT: .cfi_adjust_cfa_offset -8 654; X86-NEXT: movl %eax, %ebx 655; X86-NEXT: xorl $13, %ebx 656; X86-NEXT: orl %edi, %ebx 657; X86-NEXT: pushl $7 658; X86-NEXT: .cfi_adjust_cfa_offset 4 659; X86-NEXT: pushl $14 660; X86-NEXT: .cfi_adjust_cfa_offset 4 661; X86-NEXT: calll mult 662; X86-NEXT: addl $8, %esp 663; X86-NEXT: .cfi_adjust_cfa_offset -8 664; X86-NEXT: movl %eax, %edi 665; X86-NEXT: xorl $14, %edi 666; X86-NEXT: orl %ebx, %edi 667; X86-NEXT: pushl $7 668; X86-NEXT: .cfi_adjust_cfa_offset 4 669; X86-NEXT: pushl $15 670; X86-NEXT: .cfi_adjust_cfa_offset 4 671; X86-NEXT: calll mult 672; X86-NEXT: addl $8, %esp 673; X86-NEXT: .cfi_adjust_cfa_offset -8 674; X86-NEXT: movl %eax, %ebx 675; X86-NEXT: xorl $15, %ebx 676; X86-NEXT: orl %edi, %ebx 677; X86-NEXT: pushl $8 678; X86-NEXT: .cfi_adjust_cfa_offset 4 679; X86-NEXT: pushl $16 680; X86-NEXT: .cfi_adjust_cfa_offset 4 681; X86-NEXT: calll mult 682; X86-NEXT: addl $8, %esp 683; X86-NEXT: .cfi_adjust_cfa_offset -8 684; X86-NEXT: movl %eax, %edi 685; X86-NEXT: xorl $16, %edi 686; X86-NEXT: orl %ebx, %edi 687; X86-NEXT: pushl $8 688; X86-NEXT: .cfi_adjust_cfa_offset 4 689; X86-NEXT: pushl $17 690; X86-NEXT: .cfi_adjust_cfa_offset 4 691; X86-NEXT: calll mult 692; X86-NEXT: addl $8, %esp 693; X86-NEXT: .cfi_adjust_cfa_offset -8 694; X86-NEXT: movl %eax, %ebx 695; X86-NEXT: xorl $17, %ebx 696; X86-NEXT: orl %edi, %ebx 697; X86-NEXT: pushl $9 698; X86-NEXT: .cfi_adjust_cfa_offset 4 699; X86-NEXT: pushl $18 700; X86-NEXT: .cfi_adjust_cfa_offset 4 701; X86-NEXT: calll mult 702; X86-NEXT: addl $8, %esp 703; X86-NEXT: .cfi_adjust_cfa_offset -8 704; X86-NEXT: movl %eax, %edi 705; X86-NEXT: xorl $18, %edi 706; X86-NEXT: orl %ebx, %edi 707; X86-NEXT: pushl $9 708; X86-NEXT: .cfi_adjust_cfa_offset 4 709; X86-NEXT: pushl $19 710; X86-NEXT: .cfi_adjust_cfa_offset 4 711; X86-NEXT: calll mult 712; X86-NEXT: addl $8, %esp 713; X86-NEXT: .cfi_adjust_cfa_offset -8 714; X86-NEXT: movl %eax, %ebx 715; X86-NEXT: xorl $19, %ebx 716; X86-NEXT: orl %edi, %ebx 717; X86-NEXT: pushl $10 718; X86-NEXT: .cfi_adjust_cfa_offset 4 719; X86-NEXT: pushl $20 720; X86-NEXT: .cfi_adjust_cfa_offset 4 721; X86-NEXT: calll mult 722; X86-NEXT: addl $8, %esp 723; X86-NEXT: .cfi_adjust_cfa_offset -8 724; X86-NEXT: movl %eax, %edi 725; X86-NEXT: xorl $20, %edi 726; X86-NEXT: orl %ebx, %edi 727; X86-NEXT: pushl $10 728; X86-NEXT: .cfi_adjust_cfa_offset 4 729; X86-NEXT: pushl $21 730; X86-NEXT: .cfi_adjust_cfa_offset 4 731; X86-NEXT: calll mult 732; X86-NEXT: addl $8, %esp 733; X86-NEXT: .cfi_adjust_cfa_offset -8 734; X86-NEXT: movl %eax, %ebx 735; X86-NEXT: xorl $21, %ebx 736; X86-NEXT: orl %edi, %ebx 737; X86-NEXT: pushl $11 738; X86-NEXT: .cfi_adjust_cfa_offset 4 739; X86-NEXT: pushl $22 740; X86-NEXT: .cfi_adjust_cfa_offset 4 741; X86-NEXT: calll mult 742; X86-NEXT: addl $8, %esp 743; X86-NEXT: .cfi_adjust_cfa_offset -8 744; X86-NEXT: movl %eax, %edi 745; X86-NEXT: xorl $22, %edi 746; X86-NEXT: orl %ebx, %edi 747; X86-NEXT: pushl $11 748; X86-NEXT: .cfi_adjust_cfa_offset 4 749; X86-NEXT: pushl $23 750; X86-NEXT: .cfi_adjust_cfa_offset 4 751; X86-NEXT: calll mult 752; X86-NEXT: addl $8, %esp 753; X86-NEXT: .cfi_adjust_cfa_offset -8 754; X86-NEXT: movl %eax, %ebx 755; X86-NEXT: xorl $23, %ebx 756; X86-NEXT: orl %edi, %ebx 757; X86-NEXT: pushl $12 758; X86-NEXT: .cfi_adjust_cfa_offset 4 759; X86-NEXT: pushl $24 760; X86-NEXT: .cfi_adjust_cfa_offset 4 761; X86-NEXT: calll mult 762; X86-NEXT: addl $8, %esp 763; X86-NEXT: .cfi_adjust_cfa_offset -8 764; X86-NEXT: movl %eax, %edi 765; X86-NEXT: xorl $24, %edi 766; X86-NEXT: orl %ebx, %edi 767; X86-NEXT: pushl $12 768; X86-NEXT: .cfi_adjust_cfa_offset 4 769; X86-NEXT: pushl $25 770; X86-NEXT: .cfi_adjust_cfa_offset 4 771; X86-NEXT: calll mult 772; X86-NEXT: addl $8, %esp 773; X86-NEXT: .cfi_adjust_cfa_offset -8 774; X86-NEXT: movl %eax, %ebx 775; X86-NEXT: xorl $25, %ebx 776; X86-NEXT: orl %edi, %ebx 777; X86-NEXT: pushl $13 778; X86-NEXT: .cfi_adjust_cfa_offset 4 779; X86-NEXT: pushl $26 780; X86-NEXT: .cfi_adjust_cfa_offset 4 781; X86-NEXT: calll mult 782; X86-NEXT: addl $8, %esp 783; X86-NEXT: .cfi_adjust_cfa_offset -8 784; X86-NEXT: movl %eax, %edi 785; X86-NEXT: xorl $26, %edi 786; X86-NEXT: orl %ebx, %edi 787; X86-NEXT: pushl $13 788; X86-NEXT: .cfi_adjust_cfa_offset 4 789; X86-NEXT: pushl $27 790; X86-NEXT: .cfi_adjust_cfa_offset 4 791; X86-NEXT: calll mult 792; X86-NEXT: addl $8, %esp 793; X86-NEXT: .cfi_adjust_cfa_offset -8 794; X86-NEXT: movl %eax, %ebx 795; X86-NEXT: xorl $27, %ebx 796; X86-NEXT: orl %edi, %ebx 797; X86-NEXT: pushl $14 798; X86-NEXT: .cfi_adjust_cfa_offset 4 799; X86-NEXT: pushl $28 800; X86-NEXT: .cfi_adjust_cfa_offset 4 801; X86-NEXT: calll mult 802; X86-NEXT: addl $8, %esp 803; X86-NEXT: .cfi_adjust_cfa_offset -8 804; X86-NEXT: movl %eax, %edi 805; X86-NEXT: xorl $28, %edi 806; X86-NEXT: orl %ebx, %edi 807; X86-NEXT: pushl $14 808; X86-NEXT: .cfi_adjust_cfa_offset 4 809; X86-NEXT: pushl $29 810; X86-NEXT: .cfi_adjust_cfa_offset 4 811; X86-NEXT: calll mult 812; X86-NEXT: addl $8, %esp 813; X86-NEXT: .cfi_adjust_cfa_offset -8 814; X86-NEXT: movl %eax, %ebx 815; X86-NEXT: xorl $29, %ebx 816; X86-NEXT: orl %edi, %ebx 817; X86-NEXT: pushl $15 818; X86-NEXT: .cfi_adjust_cfa_offset 4 819; X86-NEXT: pushl $30 820; X86-NEXT: .cfi_adjust_cfa_offset 4 821; X86-NEXT: calll mult 822; X86-NEXT: addl $8, %esp 823; X86-NEXT: .cfi_adjust_cfa_offset -8 824; X86-NEXT: movl %eax, %edi 825; X86-NEXT: xorl $30, %edi 826; X86-NEXT: orl %ebx, %edi 827; X86-NEXT: pushl $15 828; X86-NEXT: .cfi_adjust_cfa_offset 4 829; X86-NEXT: pushl $31 830; X86-NEXT: .cfi_adjust_cfa_offset 4 831; X86-NEXT: calll mult 832; X86-NEXT: addl $8, %esp 833; X86-NEXT: .cfi_adjust_cfa_offset -8 834; X86-NEXT: movl %eax, %ebx 835; X86-NEXT: xorl $31, %ebx 836; X86-NEXT: orl %edi, %ebx 837; X86-NEXT: orl %esi, %ebx 838; X86-NEXT: pushl $16 839; X86-NEXT: .cfi_adjust_cfa_offset 4 840; X86-NEXT: pushl $32 841; X86-NEXT: .cfi_adjust_cfa_offset 4 842; X86-NEXT: calll mult 843; X86-NEXT: addl $8, %esp 844; X86-NEXT: .cfi_adjust_cfa_offset -8 845; X86-NEXT: xorl $32, %eax 846; X86-NEXT: xorl %ecx, %ecx 847; X86-NEXT: orl %ebx, %eax 848; X86-NEXT: setne %cl 849; X86-NEXT: negl %ecx 850; X86-NEXT: movl %ecx, %eax 851; X86-NEXT: popl %esi 852; X86-NEXT: .cfi_def_cfa_offset 12 853; X86-NEXT: popl %edi 854; X86-NEXT: .cfi_def_cfa_offset 8 855; X86-NEXT: popl %ebx 856; X86-NEXT: .cfi_def_cfa_offset 4 857; X86-NEXT: retl 858; 859; X64-HSW-LABEL: foo: 860; X64-HSW: # %bb.0: 861; X64-HSW-NEXT: pushq %rbp 862; X64-HSW-NEXT: .cfi_def_cfa_offset 16 863; X64-HSW-NEXT: pushq %r15 864; X64-HSW-NEXT: .cfi_def_cfa_offset 24 865; X64-HSW-NEXT: pushq %r14 866; X64-HSW-NEXT: .cfi_def_cfa_offset 32 867; X64-HSW-NEXT: pushq %rbx 868; X64-HSW-NEXT: .cfi_def_cfa_offset 40 869; X64-HSW-NEXT: pushq %rax 870; X64-HSW-NEXT: .cfi_def_cfa_offset 48 871; X64-HSW-NEXT: .cfi_offset %rbx, -40 872; X64-HSW-NEXT: .cfi_offset %r14, -32 873; X64-HSW-NEXT: .cfi_offset %r15, -24 874; X64-HSW-NEXT: .cfi_offset %rbp, -16 875; X64-HSW-NEXT: movl $1, %edi 876; X64-HSW-NEXT: xorl %esi, %esi 877; X64-HSW-NEXT: callq mult 878; X64-HSW-NEXT: movl %eax, %ebx 879; X64-HSW-NEXT: xorl $1, %ebx 880; X64-HSW-NEXT: movl $2, %edi 881; X64-HSW-NEXT: movl $1, %esi 882; X64-HSW-NEXT: callq mult 883; X64-HSW-NEXT: movl %eax, %ebp 884; X64-HSW-NEXT: xorl $2, %ebp 885; X64-HSW-NEXT: orl %ebx, %ebp 886; X64-HSW-NEXT: movl $3, %edi 887; X64-HSW-NEXT: movl $1, %esi 888; X64-HSW-NEXT: callq mult 889; X64-HSW-NEXT: movl %eax, %r14d 890; X64-HSW-NEXT: xorl $3, %r14d 891; X64-HSW-NEXT: movl $4, %edi 892; X64-HSW-NEXT: movl $2, %esi 893; X64-HSW-NEXT: callq mult 894; X64-HSW-NEXT: movl %eax, %ebx 895; X64-HSW-NEXT: xorl $4, %ebx 896; X64-HSW-NEXT: orl %r14d, %ebx 897; X64-HSW-NEXT: orl %ebp, %ebx 898; X64-HSW-NEXT: movl $5, %edi 899; X64-HSW-NEXT: movl $2, %esi 900; X64-HSW-NEXT: callq mult 901; X64-HSW-NEXT: movl %eax, %r14d 902; X64-HSW-NEXT: xorl $5, %r14d 903; X64-HSW-NEXT: movl $6, %edi 904; X64-HSW-NEXT: movl $3, %esi 905; X64-HSW-NEXT: callq mult 906; X64-HSW-NEXT: movl %eax, %ebp 907; X64-HSW-NEXT: xorl $6, %ebp 908; X64-HSW-NEXT: orl %r14d, %ebp 909; X64-HSW-NEXT: movl $7, %edi 910; X64-HSW-NEXT: movl $3, %esi 911; X64-HSW-NEXT: callq mult 912; X64-HSW-NEXT: movl %eax, %r14d 913; X64-HSW-NEXT: xorl $7, %r14d 914; X64-HSW-NEXT: orl %ebp, %r14d 915; X64-HSW-NEXT: orl %ebx, %r14d 916; X64-HSW-NEXT: movl $8, %edi 917; X64-HSW-NEXT: movl $4, %esi 918; X64-HSW-NEXT: callq mult 919; X64-HSW-NEXT: movl %eax, %ebx 920; X64-HSW-NEXT: xorl $8, %ebx 921; X64-HSW-NEXT: movl $9, %edi 922; X64-HSW-NEXT: movl $4, %esi 923; X64-HSW-NEXT: callq mult 924; X64-HSW-NEXT: movl %eax, %ebp 925; X64-HSW-NEXT: xorl $9, %ebp 926; X64-HSW-NEXT: orl %ebx, %ebp 927; X64-HSW-NEXT: movl $10, %edi 928; X64-HSW-NEXT: movl $5, %esi 929; X64-HSW-NEXT: callq mult 930; X64-HSW-NEXT: movl %eax, %ebx 931; X64-HSW-NEXT: xorl $10, %ebx 932; X64-HSW-NEXT: orl %ebp, %ebx 933; X64-HSW-NEXT: movl $11, %edi 934; X64-HSW-NEXT: movl $5, %esi 935; X64-HSW-NEXT: callq mult 936; X64-HSW-NEXT: movl %eax, %r15d 937; X64-HSW-NEXT: xorl $11, %r15d 938; X64-HSW-NEXT: orl %ebx, %r15d 939; X64-HSW-NEXT: orl %r14d, %r15d 940; X64-HSW-NEXT: movl $12, %edi 941; X64-HSW-NEXT: movl $6, %esi 942; X64-HSW-NEXT: callq mult 943; X64-HSW-NEXT: movl %eax, %ebx 944; X64-HSW-NEXT: xorl $12, %ebx 945; X64-HSW-NEXT: movl $13, %edi 946; X64-HSW-NEXT: movl $6, %esi 947; X64-HSW-NEXT: callq mult 948; X64-HSW-NEXT: movl %eax, %ebp 949; X64-HSW-NEXT: xorl $13, %ebp 950; X64-HSW-NEXT: orl %ebx, %ebp 951; X64-HSW-NEXT: movl $14, %edi 952; X64-HSW-NEXT: movl $7, %esi 953; X64-HSW-NEXT: callq mult 954; X64-HSW-NEXT: movl %eax, %ebx 955; X64-HSW-NEXT: xorl $14, %ebx 956; X64-HSW-NEXT: orl %ebp, %ebx 957; X64-HSW-NEXT: movl $15, %edi 958; X64-HSW-NEXT: movl $7, %esi 959; X64-HSW-NEXT: callq mult 960; X64-HSW-NEXT: movl %eax, %ebp 961; X64-HSW-NEXT: xorl $15, %ebp 962; X64-HSW-NEXT: orl %ebx, %ebp 963; X64-HSW-NEXT: movl $16, %edi 964; X64-HSW-NEXT: movl $8, %esi 965; X64-HSW-NEXT: callq mult 966; X64-HSW-NEXT: movl %eax, %r14d 967; X64-HSW-NEXT: xorl $16, %r14d 968; X64-HSW-NEXT: orl %ebp, %r14d 969; X64-HSW-NEXT: orl %r15d, %r14d 970; X64-HSW-NEXT: movl $17, %edi 971; X64-HSW-NEXT: movl $8, %esi 972; X64-HSW-NEXT: callq mult 973; X64-HSW-NEXT: movl %eax, %ebp 974; X64-HSW-NEXT: xorl $17, %ebp 975; X64-HSW-NEXT: movl $18, %edi 976; X64-HSW-NEXT: movl $9, %esi 977; X64-HSW-NEXT: callq mult 978; X64-HSW-NEXT: movl %eax, %ebx 979; X64-HSW-NEXT: xorl $18, %ebx 980; X64-HSW-NEXT: orl %ebp, %ebx 981; X64-HSW-NEXT: movl $19, %edi 982; X64-HSW-NEXT: movl $9, %esi 983; X64-HSW-NEXT: callq mult 984; X64-HSW-NEXT: movl %eax, %ebp 985; X64-HSW-NEXT: xorl $19, %ebp 986; X64-HSW-NEXT: orl %ebx, %ebp 987; X64-HSW-NEXT: movl $20, %edi 988; X64-HSW-NEXT: movl $10, %esi 989; X64-HSW-NEXT: callq mult 990; X64-HSW-NEXT: movl %eax, %ebx 991; X64-HSW-NEXT: xorl $20, %ebx 992; X64-HSW-NEXT: orl %ebp, %ebx 993; X64-HSW-NEXT: movl $21, %edi 994; X64-HSW-NEXT: movl $10, %esi 995; X64-HSW-NEXT: callq mult 996; X64-HSW-NEXT: movl %eax, %ebp 997; X64-HSW-NEXT: xorl $21, %ebp 998; X64-HSW-NEXT: orl %ebx, %ebp 999; X64-HSW-NEXT: movl $22, %edi 1000; X64-HSW-NEXT: movl $11, %esi 1001; X64-HSW-NEXT: callq mult 1002; X64-HSW-NEXT: movl %eax, %r15d 1003; X64-HSW-NEXT: xorl $22, %r15d 1004; X64-HSW-NEXT: orl %ebp, %r15d 1005; X64-HSW-NEXT: orl %r14d, %r15d 1006; X64-HSW-NEXT: movl $23, %edi 1007; X64-HSW-NEXT: movl $11, %esi 1008; X64-HSW-NEXT: callq mult 1009; X64-HSW-NEXT: movl %eax, %ebp 1010; X64-HSW-NEXT: xorl $23, %ebp 1011; X64-HSW-NEXT: movl $24, %edi 1012; X64-HSW-NEXT: movl $12, %esi 1013; X64-HSW-NEXT: callq mult 1014; X64-HSW-NEXT: movl %eax, %ebx 1015; X64-HSW-NEXT: xorl $24, %ebx 1016; X64-HSW-NEXT: orl %ebp, %ebx 1017; X64-HSW-NEXT: movl $25, %edi 1018; X64-HSW-NEXT: movl $12, %esi 1019; X64-HSW-NEXT: callq mult 1020; X64-HSW-NEXT: movl %eax, %ebp 1021; X64-HSW-NEXT: xorl $25, %ebp 1022; X64-HSW-NEXT: orl %ebx, %ebp 1023; X64-HSW-NEXT: movl $26, %edi 1024; X64-HSW-NEXT: movl $13, %esi 1025; X64-HSW-NEXT: callq mult 1026; X64-HSW-NEXT: movl %eax, %ebx 1027; X64-HSW-NEXT: xorl $26, %ebx 1028; X64-HSW-NEXT: orl %ebp, %ebx 1029; X64-HSW-NEXT: movl $27, %edi 1030; X64-HSW-NEXT: movl $13, %esi 1031; X64-HSW-NEXT: callq mult 1032; X64-HSW-NEXT: movl %eax, %ebp 1033; X64-HSW-NEXT: xorl $27, %ebp 1034; X64-HSW-NEXT: orl %ebx, %ebp 1035; X64-HSW-NEXT: movl $28, %edi 1036; X64-HSW-NEXT: movl $14, %esi 1037; X64-HSW-NEXT: callq mult 1038; X64-HSW-NEXT: movl %eax, %ebx 1039; X64-HSW-NEXT: xorl $28, %ebx 1040; X64-HSW-NEXT: orl %ebp, %ebx 1041; X64-HSW-NEXT: movl $29, %edi 1042; X64-HSW-NEXT: movl $14, %esi 1043; X64-HSW-NEXT: callq mult 1044; X64-HSW-NEXT: movl %eax, %ebp 1045; X64-HSW-NEXT: xorl $29, %ebp 1046; X64-HSW-NEXT: orl %ebx, %ebp 1047; X64-HSW-NEXT: orl %r15d, %ebp 1048; X64-HSW-NEXT: movl $30, %edi 1049; X64-HSW-NEXT: movl $15, %esi 1050; X64-HSW-NEXT: callq mult 1051; X64-HSW-NEXT: movl %eax, %r14d 1052; X64-HSW-NEXT: xorl $30, %r14d 1053; X64-HSW-NEXT: movl $31, %edi 1054; X64-HSW-NEXT: movl $15, %esi 1055; X64-HSW-NEXT: callq mult 1056; X64-HSW-NEXT: movl %eax, %ebx 1057; X64-HSW-NEXT: xorl $31, %ebx 1058; X64-HSW-NEXT: orl %r14d, %ebx 1059; X64-HSW-NEXT: orl %ebp, %ebx 1060; X64-HSW-NEXT: movl $32, %edi 1061; X64-HSW-NEXT: movl $16, %esi 1062; X64-HSW-NEXT: callq mult 1063; X64-HSW-NEXT: xorl $32, %eax 1064; X64-HSW-NEXT: xorl %ecx, %ecx 1065; X64-HSW-NEXT: orl %ebx, %eax 1066; X64-HSW-NEXT: setne %cl 1067; X64-HSW-NEXT: negl %ecx 1068; X64-HSW-NEXT: movl %ecx, %eax 1069; X64-HSW-NEXT: addq $8, %rsp 1070; X64-HSW-NEXT: .cfi_def_cfa_offset 40 1071; X64-HSW-NEXT: popq %rbx 1072; X64-HSW-NEXT: .cfi_def_cfa_offset 32 1073; X64-HSW-NEXT: popq %r14 1074; X64-HSW-NEXT: .cfi_def_cfa_offset 24 1075; X64-HSW-NEXT: popq %r15 1076; X64-HSW-NEXT: .cfi_def_cfa_offset 16 1077; X64-HSW-NEXT: popq %rbp 1078; X64-HSW-NEXT: .cfi_def_cfa_offset 8 1079; X64-HSW-NEXT: retq 1080 %1 = tail call i32 @mult(i32 1, i32 0) 1081 %2 = icmp ne i32 %1, 1 1082 %3 = tail call i32 @mult(i32 2, i32 1) 1083 %4 = icmp ne i32 %3, 2 1084 %5 = or i1 %2, %4 1085 %6 = tail call i32 @mult(i32 3, i32 1) 1086 %7 = icmp ne i32 %6, 3 1087 %8 = or i1 %5, %7 1088 %9 = tail call i32 @mult(i32 4, i32 2) 1089 %10 = icmp ne i32 %9, 4 1090 %11 = or i1 %8, %10 1091 %12 = tail call i32 @mult(i32 5, i32 2) 1092 %13 = icmp ne i32 %12, 5 1093 %14 = or i1 %11, %13 1094 %15 = tail call i32 @mult(i32 6, i32 3) 1095 %16 = icmp ne i32 %15, 6 1096 %17 = or i1 %14, %16 1097 %18 = tail call i32 @mult(i32 7, i32 3) 1098 %19 = icmp ne i32 %18, 7 1099 %20 = or i1 %17, %19 1100 %21 = tail call i32 @mult(i32 8, i32 4) 1101 %22 = icmp ne i32 %21, 8 1102 %23 = or i1 %20, %22 1103 %24 = tail call i32 @mult(i32 9, i32 4) 1104 %25 = icmp ne i32 %24, 9 1105 %26 = or i1 %23, %25 1106 %27 = tail call i32 @mult(i32 10, i32 5) 1107 %28 = icmp ne i32 %27, 10 1108 %29 = or i1 %26, %28 1109 %30 = tail call i32 @mult(i32 11, i32 5) 1110 %31 = icmp ne i32 %30, 11 1111 %32 = or i1 %29, %31 1112 %33 = tail call i32 @mult(i32 12, i32 6) 1113 %34 = icmp ne i32 %33, 12 1114 %35 = or i1 %32, %34 1115 %36 = tail call i32 @mult(i32 13, i32 6) 1116 %37 = icmp ne i32 %36, 13 1117 %38 = or i1 %35, %37 1118 %39 = tail call i32 @mult(i32 14, i32 7) 1119 %40 = icmp ne i32 %39, 14 1120 %41 = or i1 %38, %40 1121 %42 = tail call i32 @mult(i32 15, i32 7) 1122 %43 = icmp ne i32 %42, 15 1123 %44 = or i1 %41, %43 1124 %45 = tail call i32 @mult(i32 16, i32 8) 1125 %46 = icmp ne i32 %45, 16 1126 %47 = or i1 %44, %46 1127 %48 = tail call i32 @mult(i32 17, i32 8) 1128 %49 = icmp ne i32 %48, 17 1129 %50 = or i1 %47, %49 1130 %51 = tail call i32 @mult(i32 18, i32 9) 1131 %52 = icmp ne i32 %51, 18 1132 %53 = or i1 %50, %52 1133 %54 = tail call i32 @mult(i32 19, i32 9) 1134 %55 = icmp ne i32 %54, 19 1135 %56 = or i1 %53, %55 1136 %57 = tail call i32 @mult(i32 20, i32 10) 1137 %58 = icmp ne i32 %57, 20 1138 %59 = or i1 %56, %58 1139 %60 = tail call i32 @mult(i32 21, i32 10) 1140 %61 = icmp ne i32 %60, 21 1141 %62 = or i1 %59, %61 1142 %63 = tail call i32 @mult(i32 22, i32 11) 1143 %64 = icmp ne i32 %63, 22 1144 %65 = or i1 %62, %64 1145 %66 = tail call i32 @mult(i32 23, i32 11) 1146 %67 = icmp ne i32 %66, 23 1147 %68 = or i1 %65, %67 1148 %69 = tail call i32 @mult(i32 24, i32 12) 1149 %70 = icmp ne i32 %69, 24 1150 %71 = or i1 %68, %70 1151 %72 = tail call i32 @mult(i32 25, i32 12) 1152 %73 = icmp ne i32 %72, 25 1153 %74 = or i1 %71, %73 1154 %75 = tail call i32 @mult(i32 26, i32 13) 1155 %76 = icmp ne i32 %75, 26 1156 %77 = or i1 %74, %76 1157 %78 = tail call i32 @mult(i32 27, i32 13) 1158 %79 = icmp ne i32 %78, 27 1159 %80 = or i1 %77, %79 1160 %81 = tail call i32 @mult(i32 28, i32 14) 1161 %82 = icmp ne i32 %81, 28 1162 %83 = or i1 %80, %82 1163 %84 = tail call i32 @mult(i32 29, i32 14) 1164 %85 = icmp ne i32 %84, 29 1165 %86 = or i1 %83, %85 1166 %87 = tail call i32 @mult(i32 30, i32 15) 1167 %88 = icmp ne i32 %87, 30 1168 %89 = or i1 %86, %88 1169 %90 = tail call i32 @mult(i32 31, i32 15) 1170 %91 = icmp ne i32 %90, 31 1171 %92 = or i1 %89, %91 1172 %93 = tail call i32 @mult(i32 32, i32 16) 1173 %94 = icmp ne i32 %93, 32 1174 %95 = or i1 %92, %94 1175 %96 = sext i1 %95 to i32 1176 ret i32 %96 1177} 1178 1179attributes #0 = { norecurse nounwind readnone uwtable } 1180