1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefixes=X86,X86-FAST 3; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+slow-shld | FileCheck %s --check-prefixes=X86,X86-SLOW 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X64,X64-FAST 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+slow-shld | FileCheck %s --check-prefixes=X64,X64-SLOW 6 7declare i8 @llvm.fshr.i8(i8, i8, i8) nounwind readnone 8declare i16 @llvm.fshr.i16(i16, i16, i16) nounwind readnone 9declare i32 @llvm.fshr.i32(i32, i32, i32) nounwind readnone 10declare i64 @llvm.fshr.i64(i64, i64, i64) nounwind readnone 11declare i128 @llvm.fshr.i128(i128, i128, i128) nounwind readnone 12 13; 14; Variable Funnel Shift 15; 16 17define i8 @var_shift_i8(i8 %x, i8 %y, i8 %z) nounwind { 18; X86-LABEL: var_shift_i8: 19; X86: # %bb.0: 20; X86-NEXT: movb {{[0-9]+}}(%esp), %cl 21; X86-NEXT: movzbl {{[0-9]+}}(%esp), %edx 22; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 23; X86-NEXT: shll $8, %eax 24; X86-NEXT: orl %edx, %eax 25; X86-NEXT: andb $7, %cl 26; X86-NEXT: shrl %cl, %eax 27; X86-NEXT: # kill: def $al killed $al killed $eax 28; X86-NEXT: retl 29; 30; X64-LABEL: var_shift_i8: 31; X64: # %bb.0: 32; X64-NEXT: movl %edx, %ecx 33; X64-NEXT: shll $8, %edi 34; X64-NEXT: movzbl %sil, %eax 35; X64-NEXT: orl %edi, %eax 36; X64-NEXT: andb $7, %cl 37; X64-NEXT: # kill: def $cl killed $cl killed $ecx 38; X64-NEXT: shrl %cl, %eax 39; X64-NEXT: # kill: def $al killed $al killed $eax 40; X64-NEXT: retq 41 %tmp = tail call i8 @llvm.fshr.i8(i8 %x, i8 %y, i8 %z) 42 ret i8 %tmp 43} 44 45define i16 @var_shift_i16(i16 %x, i16 %y, i16 %z) nounwind { 46; X86-FAST-LABEL: var_shift_i16: 47; X86-FAST: # %bb.0: 48; X86-FAST-NEXT: movzwl {{[0-9]+}}(%esp), %edx 49; X86-FAST-NEXT: movzwl {{[0-9]+}}(%esp), %eax 50; X86-FAST-NEXT: movb {{[0-9]+}}(%esp), %cl 51; X86-FAST-NEXT: andb $15, %cl 52; X86-FAST-NEXT: shrdw %cl, %dx, %ax 53; X86-FAST-NEXT: retl 54; 55; X86-SLOW-LABEL: var_shift_i16: 56; X86-SLOW: # %bb.0: 57; X86-SLOW-NEXT: movb {{[0-9]+}}(%esp), %cl 58; X86-SLOW-NEXT: movzwl {{[0-9]+}}(%esp), %edx 59; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 60; X86-SLOW-NEXT: shll $16, %eax 61; X86-SLOW-NEXT: orl %edx, %eax 62; X86-SLOW-NEXT: andb $15, %cl 63; X86-SLOW-NEXT: shrl %cl, %eax 64; X86-SLOW-NEXT: # kill: def $ax killed $ax killed $eax 65; X86-SLOW-NEXT: retl 66; 67; X64-FAST-LABEL: var_shift_i16: 68; X64-FAST: # %bb.0: 69; X64-FAST-NEXT: movl %edx, %ecx 70; X64-FAST-NEXT: movl %esi, %eax 71; X64-FAST-NEXT: andb $15, %cl 72; X64-FAST-NEXT: # kill: def $cl killed $cl killed $ecx 73; X64-FAST-NEXT: shrdw %cl, %di, %ax 74; X64-FAST-NEXT: # kill: def $ax killed $ax killed $eax 75; X64-FAST-NEXT: retq 76; 77; X64-SLOW-LABEL: var_shift_i16: 78; X64-SLOW: # %bb.0: 79; X64-SLOW-NEXT: movl %edx, %ecx 80; X64-SLOW-NEXT: shll $16, %edi 81; X64-SLOW-NEXT: movzwl %si, %eax 82; X64-SLOW-NEXT: orl %edi, %eax 83; X64-SLOW-NEXT: andb $15, %cl 84; X64-SLOW-NEXT: # kill: def $cl killed $cl killed $ecx 85; X64-SLOW-NEXT: shrl %cl, %eax 86; X64-SLOW-NEXT: # kill: def $ax killed $ax killed $eax 87; X64-SLOW-NEXT: retq 88 %tmp = tail call i16 @llvm.fshr.i16(i16 %x, i16 %y, i16 %z) 89 ret i16 %tmp 90} 91 92define i32 @var_shift_i32(i32 %x, i32 %y, i32 %z) nounwind { 93; X86-FAST-LABEL: var_shift_i32: 94; X86-FAST: # %bb.0: 95; X86-FAST-NEXT: movb {{[0-9]+}}(%esp), %cl 96; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edx 97; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 98; X86-FAST-NEXT: shrdl %cl, %edx, %eax 99; X86-FAST-NEXT: retl 100; 101; X86-SLOW-LABEL: var_shift_i32: 102; X86-SLOW: # %bb.0: 103; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 104; X86-SLOW-NEXT: movb {{[0-9]+}}(%esp), %cl 105; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edx 106; X86-SLOW-NEXT: shrl %cl, %edx 107; X86-SLOW-NEXT: notb %cl 108; X86-SLOW-NEXT: addl %eax, %eax 109; X86-SLOW-NEXT: shll %cl, %eax 110; X86-SLOW-NEXT: orl %edx, %eax 111; X86-SLOW-NEXT: retl 112; 113; X64-FAST-LABEL: var_shift_i32: 114; X64-FAST: # %bb.0: 115; X64-FAST-NEXT: movl %edx, %ecx 116; X64-FAST-NEXT: movl %esi, %eax 117; X64-FAST-NEXT: # kill: def $cl killed $cl killed $ecx 118; X64-FAST-NEXT: shrdl %cl, %edi, %eax 119; X64-FAST-NEXT: retq 120; 121; X64-SLOW-LABEL: var_shift_i32: 122; X64-SLOW: # %bb.0: 123; X64-SLOW-NEXT: movl %edx, %ecx 124; X64-SLOW-NEXT: # kill: def $edi killed $edi def $rdi 125; X64-SLOW-NEXT: shrl %cl, %esi 126; X64-SLOW-NEXT: leal (%rdi,%rdi), %eax 127; X64-SLOW-NEXT: notb %cl 128; X64-SLOW-NEXT: # kill: def $cl killed $cl killed $ecx 129; X64-SLOW-NEXT: shll %cl, %eax 130; X64-SLOW-NEXT: orl %esi, %eax 131; X64-SLOW-NEXT: retq 132 %tmp = tail call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %z) 133 ret i32 %tmp 134} 135 136define i32 @var_shift_i32_optsize(i32 %x, i32 %y, i32 %z) nounwind optsize { 137; X86-LABEL: var_shift_i32_optsize: 138; X86: # %bb.0: 139; X86-NEXT: movb {{[0-9]+}}(%esp), %cl 140; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 141; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 142; X86-NEXT: shrdl %cl, %edx, %eax 143; X86-NEXT: retl 144; 145; X64-LABEL: var_shift_i32_optsize: 146; X64: # %bb.0: 147; X64-NEXT: movl %edx, %ecx 148; X64-NEXT: movl %esi, %eax 149; X64-NEXT: # kill: def $cl killed $cl killed $ecx 150; X64-NEXT: shrdl %cl, %edi, %eax 151; X64-NEXT: retq 152 %tmp = tail call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %z) 153 ret i32 %tmp 154} 155 156define i32 @var_shift_i32_pgso(i32 %x, i32 %y, i32 %z) nounwind !prof !14 { 157; X86-LABEL: var_shift_i32_pgso: 158; X86: # %bb.0: 159; X86-NEXT: movb {{[0-9]+}}(%esp), %cl 160; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 161; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 162; X86-NEXT: shrdl %cl, %edx, %eax 163; X86-NEXT: retl 164; 165; X64-LABEL: var_shift_i32_pgso: 166; X64: # %bb.0: 167; X64-NEXT: movl %edx, %ecx 168; X64-NEXT: movl %esi, %eax 169; X64-NEXT: # kill: def $cl killed $cl killed $ecx 170; X64-NEXT: shrdl %cl, %edi, %eax 171; X64-NEXT: retq 172 %tmp = tail call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %z) 173 ret i32 %tmp 174} 175 176define i64 @var_shift_i64(i64 %x, i64 %y, i64 %z) nounwind { 177; X86-FAST-LABEL: var_shift_i64: 178; X86-FAST: # %bb.0: 179; X86-FAST-NEXT: pushl %ebp 180; X86-FAST-NEXT: pushl %ebx 181; X86-FAST-NEXT: pushl %edi 182; X86-FAST-NEXT: pushl %esi 183; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %esi 184; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ebp 185; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 186; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edx 187; X86-FAST-NEXT: movb {{[0-9]+}}(%esp), %bl 188; X86-FAST-NEXT: movb %bl, %ch 189; X86-FAST-NEXT: notb %ch 190; X86-FAST-NEXT: shldl $1, %eax, %edx 191; X86-FAST-NEXT: addl %eax, %eax 192; X86-FAST-NEXT: movb %ch, %cl 193; X86-FAST-NEXT: shldl %cl, %eax, %edx 194; X86-FAST-NEXT: movl %ebp, %edi 195; X86-FAST-NEXT: movb %bl, %cl 196; X86-FAST-NEXT: shrl %cl, %edi 197; X86-FAST-NEXT: shrdl %cl, %ebp, %esi 198; X86-FAST-NEXT: testb $32, %bl 199; X86-FAST-NEXT: je .LBB5_2 200; X86-FAST-NEXT: # %bb.1: 201; X86-FAST-NEXT: movl %edi, %esi 202; X86-FAST-NEXT: xorl %edi, %edi 203; X86-FAST-NEXT: .LBB5_2: 204; X86-FAST-NEXT: movb %ch, %cl 205; X86-FAST-NEXT: shll %cl, %eax 206; X86-FAST-NEXT: testb $32, %ch 207; X86-FAST-NEXT: je .LBB5_4 208; X86-FAST-NEXT: # %bb.3: 209; X86-FAST-NEXT: movl %eax, %edx 210; X86-FAST-NEXT: xorl %eax, %eax 211; X86-FAST-NEXT: .LBB5_4: 212; X86-FAST-NEXT: orl %edi, %edx 213; X86-FAST-NEXT: orl %esi, %eax 214; X86-FAST-NEXT: popl %esi 215; X86-FAST-NEXT: popl %edi 216; X86-FAST-NEXT: popl %ebx 217; X86-FAST-NEXT: popl %ebp 218; X86-FAST-NEXT: retl 219; 220; X86-SLOW-LABEL: var_shift_i64: 221; X86-SLOW: # %bb.0: 222; X86-SLOW-NEXT: pushl %ebp 223; X86-SLOW-NEXT: pushl %ebx 224; X86-SLOW-NEXT: pushl %edi 225; X86-SLOW-NEXT: pushl %esi 226; X86-SLOW-NEXT: pushl %eax 227; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ebp 228; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %esi 229; X86-SLOW-NEXT: movb {{[0-9]+}}(%esp), %bl 230; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 231; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edx 232; X86-SLOW-NEXT: movl %eax, %edi 233; X86-SLOW-NEXT: andl $2147483647, %edi # imm = 0x7FFFFFFF 234; X86-SLOW-NEXT: movl %ebx, %ecx 235; X86-SLOW-NEXT: shrl %cl, %edi 236; X86-SLOW-NEXT: movl %eax, %ecx 237; X86-SLOW-NEXT: shrl $31, %ecx 238; X86-SLOW-NEXT: leal (%ecx,%edx,2), %edx 239; X86-SLOW-NEXT: movb %bl, %ch 240; X86-SLOW-NEXT: notb %ch 241; X86-SLOW-NEXT: movb %ch, %cl 242; X86-SLOW-NEXT: shll %cl, %edx 243; X86-SLOW-NEXT: movb %bl, %cl 244; X86-SLOW-NEXT: shrl %cl, %ebp 245; X86-SLOW-NEXT: movl %ebp, (%esp) # 4-byte Spill 246; X86-SLOW-NEXT: leal (%esi,%esi), %ebp 247; X86-SLOW-NEXT: movb %ch, %cl 248; X86-SLOW-NEXT: shll %cl, %ebp 249; X86-SLOW-NEXT: movb %bl, %cl 250; X86-SLOW-NEXT: shrl %cl, %esi 251; X86-SLOW-NEXT: testb $32, %bl 252; X86-SLOW-NEXT: jne .LBB5_1 253; X86-SLOW-NEXT: # %bb.2: 254; X86-SLOW-NEXT: orl (%esp), %ebp # 4-byte Folded Reload 255; X86-SLOW-NEXT: jmp .LBB5_3 256; X86-SLOW-NEXT: .LBB5_1: 257; X86-SLOW-NEXT: movl %esi, %ebp 258; X86-SLOW-NEXT: xorl %esi, %esi 259; X86-SLOW-NEXT: .LBB5_3: 260; X86-SLOW-NEXT: addl %eax, %eax 261; X86-SLOW-NEXT: movb %ch, %cl 262; X86-SLOW-NEXT: shll %cl, %eax 263; X86-SLOW-NEXT: testb $32, %ch 264; X86-SLOW-NEXT: jne .LBB5_4 265; X86-SLOW-NEXT: # %bb.5: 266; X86-SLOW-NEXT: orl %edi, %edx 267; X86-SLOW-NEXT: jmp .LBB5_6 268; X86-SLOW-NEXT: .LBB5_4: 269; X86-SLOW-NEXT: movl %eax, %edx 270; X86-SLOW-NEXT: xorl %eax, %eax 271; X86-SLOW-NEXT: .LBB5_6: 272; X86-SLOW-NEXT: orl %esi, %edx 273; X86-SLOW-NEXT: orl %ebp, %eax 274; X86-SLOW-NEXT: addl $4, %esp 275; X86-SLOW-NEXT: popl %esi 276; X86-SLOW-NEXT: popl %edi 277; X86-SLOW-NEXT: popl %ebx 278; X86-SLOW-NEXT: popl %ebp 279; X86-SLOW-NEXT: retl 280; 281; X64-FAST-LABEL: var_shift_i64: 282; X64-FAST: # %bb.0: 283; X64-FAST-NEXT: movq %rdx, %rcx 284; X64-FAST-NEXT: movq %rsi, %rax 285; X64-FAST-NEXT: # kill: def $cl killed $cl killed $rcx 286; X64-FAST-NEXT: shrdq %cl, %rdi, %rax 287; X64-FAST-NEXT: retq 288; 289; X64-SLOW-LABEL: var_shift_i64: 290; X64-SLOW: # %bb.0: 291; X64-SLOW-NEXT: movq %rdx, %rcx 292; X64-SLOW-NEXT: shrq %cl, %rsi 293; X64-SLOW-NEXT: leaq (%rdi,%rdi), %rax 294; X64-SLOW-NEXT: notb %cl 295; X64-SLOW-NEXT: # kill: def $cl killed $cl killed $rcx 296; X64-SLOW-NEXT: shlq %cl, %rax 297; X64-SLOW-NEXT: orq %rsi, %rax 298; X64-SLOW-NEXT: retq 299 %tmp = tail call i64 @llvm.fshr.i64(i64 %x, i64 %y, i64 %z) 300 ret i64 %tmp 301} 302 303define i128 @var_shift_i128(i128 %x, i128 %y, i128 %z) nounwind { 304; X86-FAST-LABEL: var_shift_i128: 305; X86-FAST: # %bb.0: 306; X86-FAST-NEXT: pushl %ebp 307; X86-FAST-NEXT: pushl %ebx 308; X86-FAST-NEXT: pushl %edi 309; X86-FAST-NEXT: pushl %esi 310; X86-FAST-NEXT: subl $76, %esp 311; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ebp 312; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 313; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edi 314; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ebx 315; X86-FAST-NEXT: movl %ebx, %ecx 316; X86-FAST-NEXT: andl $127, %ecx 317; X86-FAST-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 318; X86-FAST-NEXT: movb %cl, %ch 319; X86-FAST-NEXT: movb $64, %cl 320; X86-FAST-NEXT: subb %ch, %cl 321; X86-FAST-NEXT: shll %cl, %edi 322; X86-FAST-NEXT: movb %cl, (%esp) # 1-byte Spill 323; X86-FAST-NEXT: testb $32, %cl 324; X86-FAST-NEXT: movl $0, %esi 325; X86-FAST-NEXT: jne .LBB6_2 326; X86-FAST-NEXT: # %bb.1: 327; X86-FAST-NEXT: movl %edi, %esi 328; X86-FAST-NEXT: .LBB6_2: 329; X86-FAST-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 330; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 331; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edi 332; X86-FAST-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 333; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %esi 334; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 335; X86-FAST-NEXT: movl %eax, %edi 336; X86-FAST-NEXT: movl %ebp, %eax 337; X86-FAST-NEXT: shldl $1, %ebp, %edi 338; X86-FAST-NEXT: addl %ebp, %eax 339; X86-FAST-NEXT: notl %ebx 340; X86-FAST-NEXT: andl $127, %ebx 341; X86-FAST-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 342; X86-FAST-NEXT: movb %bl, %cl 343; X86-FAST-NEXT: shldl %cl, %eax, %edi 344; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 345; X86-FAST-NEXT: shll %cl, %eax 346; X86-FAST-NEXT: testb $32, %bl 347; X86-FAST-NEXT: movl %eax, %esi 348; X86-FAST-NEXT: jne .LBB6_4 349; X86-FAST-NEXT: # %bb.3: 350; X86-FAST-NEXT: movl %edi, %esi 351; X86-FAST-NEXT: .LBB6_4: 352; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 353; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %esi 354; X86-FAST-NEXT: movb %ch, %cl 355; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edi 356; X86-FAST-NEXT: shrdl %cl, %edi, %esi 357; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 358; X86-FAST-NEXT: movl %edi, %esi 359; X86-FAST-NEXT: shrl %cl, %esi 360; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edi 361; X86-FAST-NEXT: shrl %cl, %edi 362; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ebp 363; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edx 364; X86-FAST-NEXT: shrdl %cl, %edx, %ebp 365; X86-FAST-NEXT: testb $32, %ch 366; X86-FAST-NEXT: jne .LBB6_5 367; X86-FAST-NEXT: # %bb.6: 368; X86-FAST-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 369; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 370; X86-FAST-NEXT: jmp .LBB6_7 371; X86-FAST-NEXT: .LBB6_5: 372; X86-FAST-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 373; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 374; X86-FAST-NEXT: xorl %edi, %edi 375; X86-FAST-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 376; X86-FAST-NEXT: .LBB6_7: 377; X86-FAST-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 378; X86-FAST-NEXT: testb $32, %bl 379; X86-FAST-NEXT: movl $0, %esi 380; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ebp 381; X86-FAST-NEXT: jne .LBB6_9 382; X86-FAST-NEXT: # %bb.8: 383; X86-FAST-NEXT: movl %eax, %esi 384; X86-FAST-NEXT: .LBB6_9: 385; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edi 386; X86-FAST-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 387; X86-FAST-NEXT: jb .LBB6_11 388; X86-FAST-NEXT: # %bb.10: 389; X86-FAST-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 390; X86-FAST-NEXT: .LBB6_11: 391; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 392; X86-FAST-NEXT: shrdl $31, %edi, %eax 393; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 394; X86-FAST-NEXT: movb %bl, %cl 395; X86-FAST-NEXT: shll %cl, %eax 396; X86-FAST-NEXT: testb $32, %bl 397; X86-FAST-NEXT: movl $0, %edi 398; X86-FAST-NEXT: jne .LBB6_13 399; X86-FAST-NEXT: # %bb.12: 400; X86-FAST-NEXT: movl %eax, %edi 401; X86-FAST-NEXT: .LBB6_13: 402; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 403; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 404; X86-FAST-NEXT: movb (%esp), %cl # 1-byte Reload 405; X86-FAST-NEXT: shldl %cl, %ebp, %eax 406; X86-FAST-NEXT: testb $32, %cl 407; X86-FAST-NEXT: jne .LBB6_15 408; X86-FAST-NEXT: # %bb.14: 409; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 410; X86-FAST-NEXT: .LBB6_15: 411; X86-FAST-NEXT: movb %bl, %dh 412; X86-FAST-NEXT: addb $-64, %dh 413; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 414; X86-FAST-NEXT: movb %dh, %cl 415; X86-FAST-NEXT: shll %cl, %eax 416; X86-FAST-NEXT: movl %eax, (%esp) # 4-byte Spill 417; X86-FAST-NEXT: testb $32, %dh 418; X86-FAST-NEXT: movl $0, %eax 419; X86-FAST-NEXT: jne .LBB6_17 420; X86-FAST-NEXT: # %bb.16: 421; X86-FAST-NEXT: movl (%esp), %eax # 4-byte Reload 422; X86-FAST-NEXT: .LBB6_17: 423; X86-FAST-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 424; X86-FAST-NEXT: jb .LBB6_19 425; X86-FAST-NEXT: # %bb.18: 426; X86-FAST-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 427; X86-FAST-NEXT: .LBB6_19: 428; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 429; X86-FAST-NEXT: cmpl $64, %ebx 430; X86-FAST-NEXT: jb .LBB6_21 431; X86-FAST-NEXT: # %bb.20: 432; X86-FAST-NEXT: xorl %esi, %esi 433; X86-FAST-NEXT: .LBB6_21: 434; X86-FAST-NEXT: addb $-64, %ch 435; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 436; X86-FAST-NEXT: movb %ch, %cl 437; X86-FAST-NEXT: shrl %cl, %eax 438; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 439; X86-FAST-NEXT: testb $32, %ch 440; X86-FAST-NEXT: movl $0, %eax 441; X86-FAST-NEXT: jne .LBB6_23 442; X86-FAST-NEXT: # %bb.22: 443; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 444; X86-FAST-NEXT: .LBB6_23: 445; X86-FAST-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 446; X86-FAST-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 447; X86-FAST-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 448; X86-FAST-NEXT: jae .LBB6_25 449; X86-FAST-NEXT: # %bb.24: 450; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 451; X86-FAST-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 452; X86-FAST-NEXT: .LBB6_25: 453; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 454; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 455; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 456; X86-FAST-NEXT: movb %ch, %cl 457; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 458; X86-FAST-NEXT: shrdl %cl, %eax, %ebp 459; X86-FAST-NEXT: testb $32, %ch 460; X86-FAST-NEXT: jne .LBB6_27 461; X86-FAST-NEXT: # %bb.26: 462; X86-FAST-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 463; X86-FAST-NEXT: .LBB6_27: 464; X86-FAST-NEXT: cmpl $64, %ebx 465; X86-FAST-NEXT: jb .LBB6_29 466; X86-FAST-NEXT: # %bb.28: 467; X86-FAST-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 468; X86-FAST-NEXT: .LBB6_29: 469; X86-FAST-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 470; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ebp 471; X86-FAST-NEXT: jae .LBB6_31 472; X86-FAST-NEXT: # %bb.30: 473; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 474; X86-FAST-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 475; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 476; X86-FAST-NEXT: .LBB6_31: 477; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 478; X86-FAST-NEXT: shldl $1, %eax, %ebp 479; X86-FAST-NEXT: movl %ebp, %eax 480; X86-FAST-NEXT: movl %ebx, %ecx 481; X86-FAST-NEXT: shldl %cl, %edi, %eax 482; X86-FAST-NEXT: testb $32, %bl 483; X86-FAST-NEXT: jne .LBB6_33 484; X86-FAST-NEXT: # %bb.32: 485; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 486; X86-FAST-NEXT: .LBB6_33: 487; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 488; X86-FAST-NEXT: movb %dh, %cl 489; X86-FAST-NEXT: shldl %cl, %esi, %eax 490; X86-FAST-NEXT: testb $32, %dh 491; X86-FAST-NEXT: jne .LBB6_35 492; X86-FAST-NEXT: # %bb.34: 493; X86-FAST-NEXT: movl %eax, (%esp) # 4-byte Spill 494; X86-FAST-NEXT: .LBB6_35: 495; X86-FAST-NEXT: movb $64, %cl 496; X86-FAST-NEXT: subb %bl, %cl 497; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 498; X86-FAST-NEXT: shrdl %cl, %eax, %esi 499; X86-FAST-NEXT: shrl %cl, %eax 500; X86-FAST-NEXT: testb $32, %cl 501; X86-FAST-NEXT: je .LBB6_37 502; X86-FAST-NEXT: # %bb.36: 503; X86-FAST-NEXT: movl %eax, %esi 504; X86-FAST-NEXT: xorl %eax, %eax 505; X86-FAST-NEXT: .LBB6_37: 506; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 507; X86-FAST-NEXT: cmpl $64, %ebx 508; X86-FAST-NEXT: jae .LBB6_39 509; X86-FAST-NEXT: # %bb.38: 510; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 511; X86-FAST-NEXT: orl %eax, %ecx 512; X86-FAST-NEXT: movl %ecx, (%esp) # 4-byte Spill 513; X86-FAST-NEXT: .LBB6_39: 514; X86-FAST-NEXT: cmpl $64, %ebx 515; X86-FAST-NEXT: jae .LBB6_41 516; X86-FAST-NEXT: # %bb.40: 517; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 518; X86-FAST-NEXT: orl %esi, %eax 519; X86-FAST-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 520; X86-FAST-NEXT: .LBB6_41: 521; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 522; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 523; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 524; X86-FAST-NEXT: testl %ebx, %ebx 525; X86-FAST-NEXT: je .LBB6_43 526; X86-FAST-NEXT: # %bb.42: 527; X86-FAST-NEXT: movl (%esp), %ebp # 4-byte Reload 528; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 529; X86-FAST-NEXT: .LBB6_43: 530; X86-FAST-NEXT: orl %edx, %ebp 531; X86-FAST-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload 532; X86-FAST-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 533; X86-FAST-NEXT: je .LBB6_45 534; X86-FAST-NEXT: # %bb.44: 535; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 536; X86-FAST-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 537; X86-FAST-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 538; X86-FAST-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 539; X86-FAST-NEXT: .LBB6_45: 540; X86-FAST-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 541; X86-FAST-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload 542; X86-FAST-NEXT: movl %ecx, 4(%eax) 543; X86-FAST-NEXT: movl %esi, (%eax) 544; X86-FAST-NEXT: movl %ebp, 12(%eax) 545; X86-FAST-NEXT: movl %edi, 8(%eax) 546; X86-FAST-NEXT: addl $76, %esp 547; X86-FAST-NEXT: popl %esi 548; X86-FAST-NEXT: popl %edi 549; X86-FAST-NEXT: popl %ebx 550; X86-FAST-NEXT: popl %ebp 551; X86-FAST-NEXT: retl $4 552; 553; X86-SLOW-LABEL: var_shift_i128: 554; X86-SLOW: # %bb.0: 555; X86-SLOW-NEXT: pushl %ebp 556; X86-SLOW-NEXT: pushl %ebx 557; X86-SLOW-NEXT: pushl %edi 558; X86-SLOW-NEXT: pushl %esi 559; X86-SLOW-NEXT: subl $72, %esp 560; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edi 561; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %esi 562; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 563; X86-SLOW-NEXT: andl $127, %eax 564; X86-SLOW-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 565; X86-SLOW-NEXT: movl %eax, %edx 566; X86-SLOW-NEXT: movl %eax, %ecx 567; X86-SLOW-NEXT: shrl %cl, %esi 568; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 569; X86-SLOW-NEXT: leal (%edi,%edi), %ebp 570; X86-SLOW-NEXT: notb %al 571; X86-SLOW-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 572; X86-SLOW-NEXT: movl %eax, %ecx 573; X86-SLOW-NEXT: shll %cl, %ebp 574; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edi 575; X86-SLOW-NEXT: movl %edx, %ecx 576; X86-SLOW-NEXT: shrl %cl, %edi 577; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %esi 578; X86-SLOW-NEXT: leal (%esi,%esi), %ebx 579; X86-SLOW-NEXT: movl %eax, %ecx 580; X86-SLOW-NEXT: shll %cl, %ebx 581; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 582; X86-SLOW-NEXT: movl %edx, %ecx 583; X86-SLOW-NEXT: shrl %cl, %eax 584; X86-SLOW-NEXT: shrl %cl, %esi 585; X86-SLOW-NEXT: testb $32, %dl 586; X86-SLOW-NEXT: jne .LBB6_1 587; X86-SLOW-NEXT: # %bb.2: 588; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 589; X86-SLOW-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 590; X86-SLOW-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload 591; X86-SLOW-NEXT: orl %edi, %ebx 592; X86-SLOW-NEXT: movl %ebx, %esi 593; X86-SLOW-NEXT: jmp .LBB6_3 594; X86-SLOW-NEXT: .LBB6_1: 595; X86-SLOW-NEXT: movl %eax, %ebp 596; X86-SLOW-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 597; X86-SLOW-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 598; X86-SLOW-NEXT: .LBB6_3: 599; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 600; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edi 601; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ecx 602; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 603; X86-SLOW-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 604; X86-SLOW-NEXT: jb .LBB6_5 605; X86-SLOW-NEXT: # %bb.4: 606; X86-SLOW-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 607; X86-SLOW-NEXT: .LBB6_5: 608; X86-SLOW-NEXT: leal (%ecx,%ecx), %esi 609; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ebx 610; X86-SLOW-NEXT: notl %ebx 611; X86-SLOW-NEXT: andl $127, %ebx 612; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 613; X86-SLOW-NEXT: movl %ebx, %ecx 614; X86-SLOW-NEXT: shll %cl, %esi 615; X86-SLOW-NEXT: movl %eax, %ecx 616; X86-SLOW-NEXT: shrl $31, %ecx 617; X86-SLOW-NEXT: leal (%ecx,%edi,2), %ecx 618; X86-SLOW-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 619; X86-SLOW-NEXT: movl %ecx, %edi 620; X86-SLOW-NEXT: movl %ebx, %ecx 621; X86-SLOW-NEXT: shll %cl, %edi 622; X86-SLOW-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 623; X86-SLOW-NEXT: testb $32, %bl 624; X86-SLOW-NEXT: movl $0, %edi 625; X86-SLOW-NEXT: movl $0, %ecx 626; X86-SLOW-NEXT: jne .LBB6_7 627; X86-SLOW-NEXT: # %bb.6: 628; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 629; X86-SLOW-NEXT: movl %esi, %ecx 630; X86-SLOW-NEXT: .LBB6_7: 631; X86-SLOW-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 632; X86-SLOW-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 633; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 634; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edi 635; X86-SLOW-NEXT: movl %edi, %ecx 636; X86-SLOW-NEXT: shrl $31, %ecx 637; X86-SLOW-NEXT: leal (%ecx,%eax,2), %esi 638; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 639; X86-SLOW-NEXT: movl %ebx, %ecx 640; X86-SLOW-NEXT: shll %cl, %esi 641; X86-SLOW-NEXT: andl $2147483647, %edi # imm = 0x7FFFFFFF 642; X86-SLOW-NEXT: movl %ebx, %ecx 643; X86-SLOW-NEXT: notb %cl 644; X86-SLOW-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 645; X86-SLOW-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill 646; X86-SLOW-NEXT: shrl %cl, %edi 647; X86-SLOW-NEXT: testb $32, %bl 648; X86-SLOW-NEXT: jne .LBB6_9 649; X86-SLOW-NEXT: # %bb.8: 650; X86-SLOW-NEXT: orl %edi, %esi 651; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 652; X86-SLOW-NEXT: .LBB6_9: 653; X86-SLOW-NEXT: movb %bl, %dh 654; X86-SLOW-NEXT: addb $-64, %dh 655; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 656; X86-SLOW-NEXT: movb %dh, %cl 657; X86-SLOW-NEXT: shll %cl, %esi 658; X86-SLOW-NEXT: testb $32, %dh 659; X86-SLOW-NEXT: movl $0, %ecx 660; X86-SLOW-NEXT: jne .LBB6_11 661; X86-SLOW-NEXT: # %bb.10: 662; X86-SLOW-NEXT: movl %esi, %ecx 663; X86-SLOW-NEXT: .LBB6_11: 664; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 665; X86-SLOW-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 666; X86-SLOW-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 667; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %esi 668; X86-SLOW-NEXT: jb .LBB6_13 669; X86-SLOW-NEXT: # %bb.12: 670; X86-SLOW-NEXT: xorl %ebp, %ebp 671; X86-SLOW-NEXT: .LBB6_13: 672; X86-SLOW-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 673; X86-SLOW-NEXT: movb $64, %ch 674; X86-SLOW-NEXT: movb $64, %ah 675; X86-SLOW-NEXT: subb %dl, %ah 676; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ebp 677; X86-SLOW-NEXT: movb %ah, %cl 678; X86-SLOW-NEXT: shll %cl, %ebp 679; X86-SLOW-NEXT: notb %cl 680; X86-SLOW-NEXT: movl %esi, %edi 681; X86-SLOW-NEXT: shrl %edi 682; X86-SLOW-NEXT: shrl %cl, %edi 683; X86-SLOW-NEXT: movb %ah, %cl 684; X86-SLOW-NEXT: shll %cl, %esi 685; X86-SLOW-NEXT: testb $32, %ah 686; X86-SLOW-NEXT: jne .LBB6_14 687; X86-SLOW-NEXT: # %bb.15: 688; X86-SLOW-NEXT: orl %edi, %ebp 689; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 690; X86-SLOW-NEXT: movl %ebp, %esi 691; X86-SLOW-NEXT: jmp .LBB6_16 692; X86-SLOW-NEXT: .LBB6_14: 693; X86-SLOW-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 694; X86-SLOW-NEXT: .LBB6_16: 695; X86-SLOW-NEXT: addb $-64, %dl 696; X86-SLOW-NEXT: movb %dl, %cl 697; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 698; X86-SLOW-NEXT: shrl %cl, %eax 699; X86-SLOW-NEXT: notb %cl 700; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload 701; X86-SLOW-NEXT: shll %cl, %ebp 702; X86-SLOW-NEXT: movb %dl, %cl 703; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edi 704; X86-SLOW-NEXT: shrl %cl, %edi 705; X86-SLOW-NEXT: testb $32, %dl 706; X86-SLOW-NEXT: jne .LBB6_17 707; X86-SLOW-NEXT: # %bb.18: 708; X86-SLOW-NEXT: orl %eax, %ebp 709; X86-SLOW-NEXT: cmpl $64, %ebx 710; X86-SLOW-NEXT: jae .LBB6_20 711; X86-SLOW-NEXT: jmp .LBB6_21 712; X86-SLOW-NEXT: .LBB6_17: 713; X86-SLOW-NEXT: movl %edi, %ebp 714; X86-SLOW-NEXT: xorl %edi, %edi 715; X86-SLOW-NEXT: cmpl $64, %ebx 716; X86-SLOW-NEXT: jb .LBB6_21 717; X86-SLOW-NEXT: .LBB6_20: 718; X86-SLOW-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 719; X86-SLOW-NEXT: movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill 720; X86-SLOW-NEXT: .LBB6_21: 721; X86-SLOW-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 722; X86-SLOW-NEXT: jae .LBB6_23 723; X86-SLOW-NEXT: # %bb.22: 724; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 725; X86-SLOW-NEXT: orl %esi, %edi 726; X86-SLOW-NEXT: .LBB6_23: 727; X86-SLOW-NEXT: cmpl $64, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 728; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %esi 729; X86-SLOW-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 730; X86-SLOW-NEXT: jb .LBB6_24 731; X86-SLOW-NEXT: # %bb.25: 732; X86-SLOW-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 733; X86-SLOW-NEXT: jmp .LBB6_26 734; X86-SLOW-NEXT: .LBB6_24: 735; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 736; X86-SLOW-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload 737; X86-SLOW-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 738; X86-SLOW-NEXT: .LBB6_26: 739; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload 740; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 741; X86-SLOW-NEXT: shrl $31, %eax 742; X86-SLOW-NEXT: leal (%eax,%esi,2), %esi 743; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 744; X86-SLOW-NEXT: movb %bl, %cl 745; X86-SLOW-NEXT: shll %cl, %esi 746; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 747; X86-SLOW-NEXT: shrl %edi 748; X86-SLOW-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %cl # 1-byte Reload 749; X86-SLOW-NEXT: shrl %cl, %edi 750; X86-SLOW-NEXT: testb $32, %bl 751; X86-SLOW-NEXT: jne .LBB6_28 752; X86-SLOW-NEXT: # %bb.27: 753; X86-SLOW-NEXT: orl %edi, %esi 754; X86-SLOW-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 755; X86-SLOW-NEXT: .LBB6_28: 756; X86-SLOW-NEXT: movl %ebp, %eax 757; X86-SLOW-NEXT: movb %dh, %cl 758; X86-SLOW-NEXT: shll %cl, %eax 759; X86-SLOW-NEXT: notb %cl 760; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 761; X86-SLOW-NEXT: shrl %cl, %esi 762; X86-SLOW-NEXT: testb $32, %dh 763; X86-SLOW-NEXT: jne .LBB6_30 764; X86-SLOW-NEXT: # %bb.29: 765; X86-SLOW-NEXT: orl %esi, %eax 766; X86-SLOW-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 767; X86-SLOW-NEXT: .LBB6_30: 768; X86-SLOW-NEXT: subb %bl, %ch 769; X86-SLOW-NEXT: movl %ebp, %eax 770; X86-SLOW-NEXT: movb %ch, %cl 771; X86-SLOW-NEXT: shrl %cl, %eax 772; X86-SLOW-NEXT: addl %ebp, %ebp 773; X86-SLOW-NEXT: notb %cl 774; X86-SLOW-NEXT: shll %cl, %ebp 775; X86-SLOW-NEXT: movb %ch, %cl 776; X86-SLOW-NEXT: movl %ebp, %esi 777; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload 778; X86-SLOW-NEXT: shrl %cl, %ebp 779; X86-SLOW-NEXT: testb $32, %ch 780; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ecx 781; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 782; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 783; X86-SLOW-NEXT: jne .LBB6_31 784; X86-SLOW-NEXT: # %bb.32: 785; X86-SLOW-NEXT: orl %ebp, %esi 786; X86-SLOW-NEXT: movl %esi, %ebp 787; X86-SLOW-NEXT: cmpl $64, %ebx 788; X86-SLOW-NEXT: jb .LBB6_34 789; X86-SLOW-NEXT: jmp .LBB6_35 790; X86-SLOW-NEXT: .LBB6_31: 791; X86-SLOW-NEXT: movl %eax, %ebp 792; X86-SLOW-NEXT: xorl %eax, %eax 793; X86-SLOW-NEXT: cmpl $64, %ebx 794; X86-SLOW-NEXT: jae .LBB6_35 795; X86-SLOW-NEXT: .LBB6_34: 796; X86-SLOW-NEXT: movl %ebp, %esi 797; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload 798; X86-SLOW-NEXT: orl %eax, %ebp 799; X86-SLOW-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 800; X86-SLOW-NEXT: movl %esi, %ebp 801; X86-SLOW-NEXT: .LBB6_35: 802; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 803; X86-SLOW-NEXT: cmpl $64, %ebx 804; X86-SLOW-NEXT: jae .LBB6_37 805; X86-SLOW-NEXT: # %bb.36: 806; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 807; X86-SLOW-NEXT: orl %ebp, %eax 808; X86-SLOW-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 809; X86-SLOW-NEXT: .LBB6_37: 810; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ebp 811; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 812; X86-SLOW-NEXT: testl %ebx, %ebx 813; X86-SLOW-NEXT: je .LBB6_39 814; X86-SLOW-NEXT: # %bb.38: 815; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 816; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 817; X86-SLOW-NEXT: .LBB6_39: 818; X86-SLOW-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload 819; X86-SLOW-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 820; X86-SLOW-NEXT: je .LBB6_41 821; X86-SLOW-NEXT: # %bb.40: 822; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 823; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload 824; X86-SLOW-NEXT: .LBB6_41: 825; X86-SLOW-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload 826; X86-SLOW-NEXT: orl %ecx, %ebx 827; X86-SLOW-NEXT: orl %ebp, %edx 828; X86-SLOW-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload 829; X86-SLOW-NEXT: movl %ebx, (%eax) 830; X86-SLOW-NEXT: movl %esi, 12(%eax) 831; X86-SLOW-NEXT: movl %edx, 4(%eax) 832; X86-SLOW-NEXT: movl %edi, 8(%eax) 833; X86-SLOW-NEXT: addl $72, %esp 834; X86-SLOW-NEXT: popl %esi 835; X86-SLOW-NEXT: popl %edi 836; X86-SLOW-NEXT: popl %ebx 837; X86-SLOW-NEXT: popl %ebp 838; X86-SLOW-NEXT: retl $4 839; 840; X64-FAST-LABEL: var_shift_i128: 841; X64-FAST: # %bb.0: 842; X64-FAST-NEXT: movq %r8, %r10 843; X64-FAST-NEXT: movq %rcx, %r9 844; X64-FAST-NEXT: movq %rdx, %r8 845; X64-FAST-NEXT: movq %rsi, %rdx 846; X64-FAST-NEXT: movl %r10d, %ecx 847; X64-FAST-NEXT: shrdq %cl, %r9, %r8 848; X64-FAST-NEXT: shrq %cl, %r9 849; X64-FAST-NEXT: xorl %eax, %eax 850; X64-FAST-NEXT: testb $64, %r10b 851; X64-FAST-NEXT: cmovneq %r9, %r8 852; X64-FAST-NEXT: cmovneq %rax, %r9 853; X64-FAST-NEXT: shldq $1, %rdi, %rdx 854; X64-FAST-NEXT: addq %rdi, %rdi 855; X64-FAST-NEXT: notb %r10b 856; X64-FAST-NEXT: movl %r10d, %ecx 857; X64-FAST-NEXT: shldq %cl, %rdi, %rdx 858; X64-FAST-NEXT: shlq %cl, %rdi 859; X64-FAST-NEXT: testb $64, %r10b 860; X64-FAST-NEXT: cmovneq %rdi, %rdx 861; X64-FAST-NEXT: cmoveq %rdi, %rax 862; X64-FAST-NEXT: orq %r8, %rax 863; X64-FAST-NEXT: orq %r9, %rdx 864; X64-FAST-NEXT: retq 865; 866; X64-SLOW-LABEL: var_shift_i128: 867; X64-SLOW: # %bb.0: 868; X64-SLOW-NEXT: movq %rcx, %r9 869; X64-SLOW-NEXT: movq %rdx, %r10 870; X64-SLOW-NEXT: movabsq $9223372036854775807, %rax # imm = 0x7FFFFFFFFFFFFFFF 871; X64-SLOW-NEXT: andq %rdi, %rax 872; X64-SLOW-NEXT: movl %r8d, %ecx 873; X64-SLOW-NEXT: shrq %cl, %rax 874; X64-SLOW-NEXT: movq %rdi, %rcx 875; X64-SLOW-NEXT: shrq $63, %rcx 876; X64-SLOW-NEXT: leaq (%rcx,%rsi,2), %rdx 877; X64-SLOW-NEXT: movl %r8d, %r11d 878; X64-SLOW-NEXT: notb %r11b 879; X64-SLOW-NEXT: movl %r11d, %ecx 880; X64-SLOW-NEXT: shlq %cl, %rdx 881; X64-SLOW-NEXT: orq %rax, %rdx 882; X64-SLOW-NEXT: movl %r8d, %ecx 883; X64-SLOW-NEXT: shrq %cl, %r10 884; X64-SLOW-NEXT: leaq (%r9,%r9), %rsi 885; X64-SLOW-NEXT: movl %r11d, %ecx 886; X64-SLOW-NEXT: shlq %cl, %rsi 887; X64-SLOW-NEXT: orq %r10, %rsi 888; X64-SLOW-NEXT: movl %r8d, %ecx 889; X64-SLOW-NEXT: shrq %cl, %r9 890; X64-SLOW-NEXT: xorl %eax, %eax 891; X64-SLOW-NEXT: testb $64, %r8b 892; X64-SLOW-NEXT: cmovneq %r9, %rsi 893; X64-SLOW-NEXT: cmovneq %rax, %r9 894; X64-SLOW-NEXT: addq %rdi, %rdi 895; X64-SLOW-NEXT: movl %r11d, %ecx 896; X64-SLOW-NEXT: shlq %cl, %rdi 897; X64-SLOW-NEXT: testb $64, %r11b 898; X64-SLOW-NEXT: cmovneq %rdi, %rdx 899; X64-SLOW-NEXT: cmoveq %rdi, %rax 900; X64-SLOW-NEXT: orq %rsi, %rax 901; X64-SLOW-NEXT: orq %r9, %rdx 902; X64-SLOW-NEXT: retq 903 %tmp = tail call i128 @llvm.fshr.i128(i128 %x, i128 %y, i128 %z) 904 ret i128 %tmp 905} 906 907; 908; Const Funnel Shift 909; 910 911define i8 @const_shift_i8(i8 %x, i8 %y) nounwind { 912; X86-LABEL: const_shift_i8: 913; X86: # %bb.0: 914; X86-NEXT: movb {{[0-9]+}}(%esp), %al 915; X86-NEXT: movb {{[0-9]+}}(%esp), %cl 916; X86-NEXT: shrb $7, %cl 917; X86-NEXT: addb %al, %al 918; X86-NEXT: orb %cl, %al 919; X86-NEXT: retl 920; 921; X64-LABEL: const_shift_i8: 922; X64: # %bb.0: 923; X64-NEXT: # kill: def $edi killed $edi def $rdi 924; X64-NEXT: shrb $7, %sil 925; X64-NEXT: leal (%rdi,%rdi), %eax 926; X64-NEXT: orb %sil, %al 927; X64-NEXT: # kill: def $al killed $al killed $eax 928; X64-NEXT: retq 929 %tmp = tail call i8 @llvm.fshr.i8(i8 %x, i8 %y, i8 7) 930 ret i8 %tmp 931} 932 933define i16 @const_shift_i16(i16 %x, i16 %y) nounwind { 934; X86-FAST-LABEL: const_shift_i16: 935; X86-FAST: # %bb.0: 936; X86-FAST-NEXT: movzwl {{[0-9]+}}(%esp), %ecx 937; X86-FAST-NEXT: movzwl {{[0-9]+}}(%esp), %eax 938; X86-FAST-NEXT: shrdw $7, %cx, %ax 939; X86-FAST-NEXT: retl 940; 941; X86-SLOW-LABEL: const_shift_i16: 942; X86-SLOW: # %bb.0: 943; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 944; X86-SLOW-NEXT: movzwl {{[0-9]+}}(%esp), %ecx 945; X86-SLOW-NEXT: shrl $7, %ecx 946; X86-SLOW-NEXT: shll $9, %eax 947; X86-SLOW-NEXT: orl %ecx, %eax 948; X86-SLOW-NEXT: # kill: def $ax killed $ax killed $eax 949; X86-SLOW-NEXT: retl 950; 951; X64-FAST-LABEL: const_shift_i16: 952; X64-FAST: # %bb.0: 953; X64-FAST-NEXT: movl %esi, %eax 954; X64-FAST-NEXT: shrdw $7, %di, %ax 955; X64-FAST-NEXT: # kill: def $ax killed $ax killed $eax 956; X64-FAST-NEXT: retq 957; 958; X64-SLOW-LABEL: const_shift_i16: 959; X64-SLOW: # %bb.0: 960; X64-SLOW-NEXT: movzwl %si, %eax 961; X64-SLOW-NEXT: shll $9, %edi 962; X64-SLOW-NEXT: shrl $7, %eax 963; X64-SLOW-NEXT: orl %edi, %eax 964; X64-SLOW-NEXT: # kill: def $ax killed $ax killed $eax 965; X64-SLOW-NEXT: retq 966 %tmp = tail call i16 @llvm.fshr.i16(i16 %x, i16 %y, i16 7) 967 ret i16 %tmp 968} 969 970define i32 @const_shift_i32(i32 %x, i32 %y) nounwind { 971; X86-FAST-LABEL: const_shift_i32: 972; X86-FAST: # %bb.0: 973; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ecx 974; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 975; X86-FAST-NEXT: shrdl $7, %ecx, %eax 976; X86-FAST-NEXT: retl 977; 978; X86-SLOW-LABEL: const_shift_i32: 979; X86-SLOW: # %bb.0: 980; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %eax 981; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ecx 982; X86-SLOW-NEXT: shrl $7, %ecx 983; X86-SLOW-NEXT: shll $25, %eax 984; X86-SLOW-NEXT: orl %ecx, %eax 985; X86-SLOW-NEXT: retl 986; 987; X64-FAST-LABEL: const_shift_i32: 988; X64-FAST: # %bb.0: 989; X64-FAST-NEXT: movl %edi, %eax 990; X64-FAST-NEXT: shldl $25, %esi, %eax 991; X64-FAST-NEXT: retq 992; 993; X64-SLOW-LABEL: const_shift_i32: 994; X64-SLOW: # %bb.0: 995; X64-SLOW-NEXT: # kill: def $esi killed $esi def $rsi 996; X64-SLOW-NEXT: # kill: def $edi killed $edi def $rdi 997; X64-SLOW-NEXT: shrl $7, %esi 998; X64-SLOW-NEXT: shll $25, %edi 999; X64-SLOW-NEXT: leal (%rdi,%rsi), %eax 1000; X64-SLOW-NEXT: retq 1001 %tmp = tail call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 7) 1002 ret i32 %tmp 1003} 1004 1005define i64 @const_shift_i64(i64 %x, i64 %y) nounwind { 1006; X86-FAST-LABEL: const_shift_i64: 1007; X86-FAST: # %bb.0: 1008; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %eax 1009; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %ecx 1010; X86-FAST-NEXT: movl {{[0-9]+}}(%esp), %edx 1011; X86-FAST-NEXT: shldl $25, %ecx, %edx 1012; X86-FAST-NEXT: shrdl $7, %ecx, %eax 1013; X86-FAST-NEXT: retl 1014; 1015; X86-SLOW-LABEL: const_shift_i64: 1016; X86-SLOW: # %bb.0: 1017; X86-SLOW-NEXT: pushl %esi 1018; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %edx 1019; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %ecx 1020; X86-SLOW-NEXT: movl {{[0-9]+}}(%esp), %esi 1021; X86-SLOW-NEXT: shrl $7, %ecx 1022; X86-SLOW-NEXT: movl %esi, %eax 1023; X86-SLOW-NEXT: shll $25, %eax 1024; X86-SLOW-NEXT: orl %ecx, %eax 1025; X86-SLOW-NEXT: shrl $7, %esi 1026; X86-SLOW-NEXT: shll $25, %edx 1027; X86-SLOW-NEXT: orl %esi, %edx 1028; X86-SLOW-NEXT: popl %esi 1029; X86-SLOW-NEXT: retl 1030; 1031; X64-FAST-LABEL: const_shift_i64: 1032; X64-FAST: # %bb.0: 1033; X64-FAST-NEXT: movq %rdi, %rax 1034; X64-FAST-NEXT: shldq $57, %rsi, %rax 1035; X64-FAST-NEXT: retq 1036; 1037; X64-SLOW-LABEL: const_shift_i64: 1038; X64-SLOW: # %bb.0: 1039; X64-SLOW-NEXT: shrq $7, %rsi 1040; X64-SLOW-NEXT: shlq $57, %rdi 1041; X64-SLOW-NEXT: leaq (%rdi,%rsi), %rax 1042; X64-SLOW-NEXT: retq 1043 %tmp = tail call i64 @llvm.fshr.i64(i64 %x, i64 %y, i64 7) 1044 ret i64 %tmp 1045} 1046 1047; 1048; Combine Consecutive Loads 1049; 1050 1051define i8 @combine_fshr_load_i8(i8* %p) nounwind { 1052; X86-LABEL: combine_fshr_load_i8: 1053; X86: # %bb.0: 1054; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1055; X86-NEXT: movb (%eax), %al 1056; X86-NEXT: retl 1057; 1058; X64-LABEL: combine_fshr_load_i8: 1059; X64: # %bb.0: 1060; X64-NEXT: movb (%rdi), %al 1061; X64-NEXT: retq 1062 %p1 = getelementptr i8, i8* %p, i32 1 1063 %ld0 = load i8, i8 *%p 1064 %ld1 = load i8, i8 *%p1 1065 %res = call i8 @llvm.fshr.i8(i8 %ld1, i8 %ld0, i8 8) 1066 ret i8 %res 1067} 1068 1069define i16 @combine_fshr_load_i16(i16* %p) nounwind { 1070; X86-LABEL: combine_fshr_load_i16: 1071; X86: # %bb.0: 1072; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1073; X86-NEXT: movzwl 1(%eax), %eax 1074; X86-NEXT: retl 1075; 1076; X64-LABEL: combine_fshr_load_i16: 1077; X64: # %bb.0: 1078; X64-NEXT: movzwl 1(%rdi), %eax 1079; X64-NEXT: retq 1080 %p0 = getelementptr i16, i16* %p, i32 0 1081 %p1 = getelementptr i16, i16* %p, i32 1 1082 %ld0 = load i16, i16 *%p0 1083 %ld1 = load i16, i16 *%p1 1084 %res = call i16 @llvm.fshr.i16(i16 %ld1, i16 %ld0, i16 8) 1085 ret i16 %res 1086} 1087 1088define i32 @combine_fshr_load_i32(i32* %p) nounwind { 1089; X86-LABEL: combine_fshr_load_i32: 1090; X86: # %bb.0: 1091; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1092; X86-NEXT: movl 9(%eax), %eax 1093; X86-NEXT: retl 1094; 1095; X64-LABEL: combine_fshr_load_i32: 1096; X64: # %bb.0: 1097; X64-NEXT: movl 9(%rdi), %eax 1098; X64-NEXT: retq 1099 %p0 = getelementptr i32, i32* %p, i32 2 1100 %p1 = getelementptr i32, i32* %p, i32 3 1101 %ld0 = load i32, i32 *%p0 1102 %ld1 = load i32, i32 *%p1 1103 %res = call i32 @llvm.fshr.i32(i32 %ld1, i32 %ld0, i32 8) 1104 ret i32 %res 1105} 1106 1107define i64 @combine_fshr_load_i64(i64* %p) nounwind { 1108; X86-LABEL: combine_fshr_load_i64: 1109; X86: # %bb.0: 1110; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 1111; X86-NEXT: movl 11(%ecx), %eax 1112; X86-NEXT: movl 15(%ecx), %edx 1113; X86-NEXT: retl 1114; 1115; X64-LABEL: combine_fshr_load_i64: 1116; X64: # %bb.0: 1117; X64-NEXT: movq 11(%rdi), %rax 1118; X64-NEXT: retq 1119 %p0 = getelementptr i64, i64* %p, i64 1 1120 %p1 = getelementptr i64, i64* %p, i64 2 1121 %ld0 = load i64, i64 *%p0 1122 %ld1 = load i64, i64 *%p1 1123 %res = call i64 @llvm.fshr.i64(i64 %ld1, i64 %ld0, i64 24) 1124 ret i64 %res 1125} 1126 1127!llvm.module.flags = !{!0} 1128!0 = !{i32 1, !"ProfileSummary", !1} 1129!1 = !{!2, !3, !4, !5, !6, !7, !8, !9} 1130!2 = !{!"ProfileFormat", !"InstrProf"} 1131!3 = !{!"TotalCount", i64 10000} 1132!4 = !{!"MaxCount", i64 10} 1133!5 = !{!"MaxInternalCount", i64 1} 1134!6 = !{!"MaxFunctionCount", i64 1000} 1135!7 = !{!"NumCounts", i64 3} 1136!8 = !{!"NumFunctions", i64 3} 1137!9 = !{!"DetailedSummary", !10} 1138!10 = !{!11, !12, !13} 1139!11 = !{i32 10000, i64 100, i32 1} 1140!12 = !{i32 999000, i64 100, i32 1} 1141!13 = !{i32 999999, i64 1, i32 2} 1142!14 = !{!"function_entry_count", i64 0} 1143