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