1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X64 3; RUN: llc < %s -mtriple=i686 -mattr=cmov | FileCheck %s --check-prefix=X86 4 5declare i4 @llvm.sdiv.fix.sat.i4 (i4, i4, i32) 6declare i15 @llvm.sdiv.fix.sat.i15 (i15, i15, i32) 7declare i16 @llvm.sdiv.fix.sat.i16 (i16, i16, i32) 8declare i18 @llvm.sdiv.fix.sat.i18 (i18, i18, i32) 9declare i64 @llvm.sdiv.fix.sat.i64 (i64, i64, i32) 10declare <4 x i32> @llvm.sdiv.fix.sat.v4i32(<4 x i32>, <4 x i32>, i32) 11 12define i16 @func(i16 %x, i16 %y) nounwind { 13; 14; X64-LABEL: func: 15; X64: # %bb.0: 16; X64-NEXT: movswl %si, %esi 17; X64-NEXT: movswl %di, %ecx 18; X64-NEXT: shll $8, %ecx 19; X64-NEXT: movl %ecx, %eax 20; X64-NEXT: cltd 21; X64-NEXT: idivl %esi 22; X64-NEXT: # kill: def $eax killed $eax def $rax 23; X64-NEXT: leal -1(%rax), %edi 24; X64-NEXT: testl %esi, %esi 25; X64-NEXT: sets %sil 26; X64-NEXT: testl %ecx, %ecx 27; X64-NEXT: sets %cl 28; X64-NEXT: xorb %sil, %cl 29; X64-NEXT: testl %edx, %edx 30; X64-NEXT: setne %dl 31; X64-NEXT: testb %cl, %dl 32; X64-NEXT: cmovnel %edi, %eax 33; X64-NEXT: cmpl $65535, %eax # imm = 0xFFFF 34; X64-NEXT: movl $65535, %ecx # imm = 0xFFFF 35; X64-NEXT: cmovgel %ecx, %eax 36; X64-NEXT: cmpl $-65535, %eax # imm = 0xFFFF0001 37; X64-NEXT: movl $-65536, %ecx # imm = 0xFFFF0000 38; X64-NEXT: cmovll %ecx, %eax 39; X64-NEXT: shrl %eax 40; X64-NEXT: # kill: def $ax killed $ax killed $rax 41; X64-NEXT: retq 42; 43; X86-LABEL: func: 44; X86: # %bb.0: 45; X86-NEXT: pushl %ebx 46; X86-NEXT: pushl %edi 47; X86-NEXT: pushl %esi 48; X86-NEXT: movswl {{[0-9]+}}(%esp), %esi 49; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx 50; X86-NEXT: shll $8, %ecx 51; X86-NEXT: movl %ecx, %eax 52; X86-NEXT: cltd 53; X86-NEXT: idivl %esi 54; X86-NEXT: leal -1(%eax), %edi 55; X86-NEXT: testl %esi, %esi 56; X86-NEXT: sets %bl 57; X86-NEXT: testl %ecx, %ecx 58; X86-NEXT: sets %cl 59; X86-NEXT: xorb %bl, %cl 60; X86-NEXT: testl %edx, %edx 61; X86-NEXT: setne %dl 62; X86-NEXT: testb %cl, %dl 63; X86-NEXT: cmovnel %edi, %eax 64; X86-NEXT: cmpl $65535, %eax # imm = 0xFFFF 65; X86-NEXT: movl $65535, %ecx # imm = 0xFFFF 66; X86-NEXT: cmovgel %ecx, %eax 67; X86-NEXT: cmpl $-65535, %eax # imm = 0xFFFF0001 68; X86-NEXT: movl $-65536, %ecx # imm = 0xFFFF0000 69; X86-NEXT: cmovll %ecx, %eax 70; X86-NEXT: shrl %eax 71; X86-NEXT: # kill: def $ax killed $ax killed $eax 72; X86-NEXT: popl %esi 73; X86-NEXT: popl %edi 74; X86-NEXT: popl %ebx 75; X86-NEXT: retl 76 %tmp = call i16 @llvm.sdiv.fix.sat.i16(i16 %x, i16 %y, i32 7) 77 ret i16 %tmp 78} 79 80define i16 @func2(i8 %x, i8 %y) nounwind { 81; 82; X64-LABEL: func2: 83; X64: # %bb.0: 84; X64-NEXT: movsbl %dil, %eax 85; X64-NEXT: movsbl %sil, %ecx 86; X64-NEXT: movswl %cx, %esi 87; X64-NEXT: movswl %ax, %ecx 88; X64-NEXT: shll $14, %ecx 89; X64-NEXT: movl %ecx, %eax 90; X64-NEXT: cltd 91; X64-NEXT: idivl %esi 92; X64-NEXT: # kill: def $eax killed $eax def $rax 93; X64-NEXT: leal -1(%rax), %edi 94; X64-NEXT: testl %esi, %esi 95; X64-NEXT: sets %sil 96; X64-NEXT: testl %ecx, %ecx 97; X64-NEXT: sets %cl 98; X64-NEXT: xorb %sil, %cl 99; X64-NEXT: testl %edx, %edx 100; X64-NEXT: setne %dl 101; X64-NEXT: testb %cl, %dl 102; X64-NEXT: cmovnel %edi, %eax 103; X64-NEXT: cmpl $16383, %eax # imm = 0x3FFF 104; X64-NEXT: movl $16383, %ecx # imm = 0x3FFF 105; X64-NEXT: cmovgel %ecx, %eax 106; X64-NEXT: cmpl $-16383, %eax # imm = 0xC001 107; X64-NEXT: movl $-16384, %ecx # imm = 0xC000 108; X64-NEXT: cmovll %ecx, %eax 109; X64-NEXT: # kill: def $ax killed $ax killed $rax 110; X64-NEXT: retq 111; 112; X86-LABEL: func2: 113; X86: # %bb.0: 114; X86-NEXT: pushl %ebx 115; X86-NEXT: pushl %edi 116; X86-NEXT: pushl %esi 117; X86-NEXT: movsbl {{[0-9]+}}(%esp), %esi 118; X86-NEXT: movsbl {{[0-9]+}}(%esp), %ecx 119; X86-NEXT: shll $14, %ecx 120; X86-NEXT: movl %ecx, %eax 121; X86-NEXT: cltd 122; X86-NEXT: idivl %esi 123; X86-NEXT: leal -1(%eax), %edi 124; X86-NEXT: testl %esi, %esi 125; X86-NEXT: sets %bl 126; X86-NEXT: testl %ecx, %ecx 127; X86-NEXT: sets %cl 128; X86-NEXT: xorb %bl, %cl 129; X86-NEXT: testl %edx, %edx 130; X86-NEXT: setne %dl 131; X86-NEXT: testb %cl, %dl 132; X86-NEXT: cmovnel %edi, %eax 133; X86-NEXT: cmpl $16383, %eax # imm = 0x3FFF 134; X86-NEXT: movl $16383, %ecx # imm = 0x3FFF 135; X86-NEXT: cmovgel %ecx, %eax 136; X86-NEXT: cmpl $-16383, %eax # imm = 0xC001 137; X86-NEXT: movl $-16384, %ecx # imm = 0xC000 138; X86-NEXT: cmovll %ecx, %eax 139; X86-NEXT: # kill: def $ax killed $ax killed $eax 140; X86-NEXT: popl %esi 141; X86-NEXT: popl %edi 142; X86-NEXT: popl %ebx 143; X86-NEXT: retl 144 %x2 = sext i8 %x to i15 145 %y2 = sext i8 %y to i15 146 %tmp = call i15 @llvm.sdiv.fix.sat.i15(i15 %x2, i15 %y2, i32 14) 147 %tmp2 = sext i15 %tmp to i16 148 ret i16 %tmp2 149} 150 151define i16 @func3(i15 %x, i8 %y) nounwind { 152; 153; X64-LABEL: func3: 154; X64: # %bb.0: 155; X64-NEXT: shll $8, %esi 156; X64-NEXT: movswl %si, %ecx 157; X64-NEXT: addl %edi, %edi 158; X64-NEXT: shrl $4, %ecx 159; X64-NEXT: movl %edi, %eax 160; X64-NEXT: cwtd 161; X64-NEXT: idivw %cx 162; X64-NEXT: # kill: def $ax killed $ax def $rax 163; X64-NEXT: leal -1(%rax), %esi 164; X64-NEXT: testw %di, %di 165; X64-NEXT: sets %dil 166; X64-NEXT: testw %cx, %cx 167; X64-NEXT: sets %cl 168; X64-NEXT: xorb %dil, %cl 169; X64-NEXT: testw %dx, %dx 170; X64-NEXT: setne %dl 171; X64-NEXT: testb %cl, %dl 172; X64-NEXT: cmovnel %esi, %eax 173; X64-NEXT: movswl %ax, %ecx 174; X64-NEXT: cmpl $16383, %ecx # imm = 0x3FFF 175; X64-NEXT: movl $16383, %ecx # imm = 0x3FFF 176; X64-NEXT: cmovgel %ecx, %eax 177; X64-NEXT: movswl %ax, %ecx 178; X64-NEXT: cmpl $-16383, %ecx # imm = 0xC001 179; X64-NEXT: movl $49152, %ecx # imm = 0xC000 180; X64-NEXT: cmovll %ecx, %eax 181; X64-NEXT: # kill: def $ax killed $ax killed $rax 182; X64-NEXT: retq 183; 184; X86-LABEL: func3: 185; X86: # %bb.0: 186; X86-NEXT: pushl %edi 187; X86-NEXT: pushl %esi 188; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 189; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 190; X86-NEXT: shll $8, %eax 191; X86-NEXT: movswl %ax, %esi 192; X86-NEXT: addl %ecx, %ecx 193; X86-NEXT: shrl $4, %esi 194; X86-NEXT: movl %ecx, %eax 195; X86-NEXT: cwtd 196; X86-NEXT: idivw %si 197; X86-NEXT: # kill: def $ax killed $ax def $eax 198; X86-NEXT: leal -1(%eax), %edi 199; X86-NEXT: testw %cx, %cx 200; X86-NEXT: sets %cl 201; X86-NEXT: testw %si, %si 202; X86-NEXT: sets %ch 203; X86-NEXT: xorb %cl, %ch 204; X86-NEXT: testw %dx, %dx 205; X86-NEXT: setne %cl 206; X86-NEXT: testb %ch, %cl 207; X86-NEXT: cmovnel %edi, %eax 208; X86-NEXT: movswl %ax, %ecx 209; X86-NEXT: cmpl $16383, %ecx # imm = 0x3FFF 210; X86-NEXT: movl $16383, %ecx # imm = 0x3FFF 211; X86-NEXT: cmovgel %ecx, %eax 212; X86-NEXT: movswl %ax, %ecx 213; X86-NEXT: cmpl $-16383, %ecx # imm = 0xC001 214; X86-NEXT: movl $49152, %ecx # imm = 0xC000 215; X86-NEXT: cmovll %ecx, %eax 216; X86-NEXT: # kill: def $ax killed $ax killed $eax 217; X86-NEXT: popl %esi 218; X86-NEXT: popl %edi 219; X86-NEXT: retl 220 %y2 = sext i8 %y to i15 221 %y3 = shl i15 %y2, 7 222 %tmp = call i15 @llvm.sdiv.fix.sat.i15(i15 %x, i15 %y3, i32 4) 223 %tmp2 = sext i15 %tmp to i16 224 ret i16 %tmp2 225} 226 227define i4 @func4(i4 %x, i4 %y) nounwind { 228; 229; X64-LABEL: func4: 230; X64: # %bb.0: 231; X64-NEXT: pushq %rbx 232; X64-NEXT: shlb $4, %sil 233; X64-NEXT: sarb $4, %sil 234; X64-NEXT: shlb $4, %dil 235; X64-NEXT: sarb $4, %dil 236; X64-NEXT: shlb $2, %dil 237; X64-NEXT: movsbl %dil, %ecx 238; X64-NEXT: movl %ecx, %eax 239; X64-NEXT: idivb %sil 240; X64-NEXT: movsbl %ah, %ebx 241; X64-NEXT: movzbl %al, %eax 242; X64-NEXT: leal -1(%rax), %edi 243; X64-NEXT: movzbl %dil, %edi 244; X64-NEXT: testb %sil, %sil 245; X64-NEXT: sets %dl 246; X64-NEXT: testb %cl, %cl 247; X64-NEXT: sets %cl 248; X64-NEXT: xorb %dl, %cl 249; X64-NEXT: testb %bl, %bl 250; X64-NEXT: setne %dl 251; X64-NEXT: testb %cl, %dl 252; X64-NEXT: cmovel %eax, %edi 253; X64-NEXT: cmpb $7, %dil 254; X64-NEXT: movl $7, %ecx 255; X64-NEXT: cmovll %edi, %ecx 256; X64-NEXT: cmpb $-7, %cl 257; X64-NEXT: movl $248, %eax 258; X64-NEXT: cmovgel %ecx, %eax 259; X64-NEXT: # kill: def $al killed $al killed $eax 260; X64-NEXT: popq %rbx 261; X64-NEXT: retq 262; 263; X86-LABEL: func4: 264; X86: # %bb.0: 265; X86-NEXT: pushl %ebx 266; X86-NEXT: pushl %esi 267; X86-NEXT: movb {{[0-9]+}}(%esp), %cl 268; X86-NEXT: shlb $4, %cl 269; X86-NEXT: sarb $4, %cl 270; X86-NEXT: movb {{[0-9]+}}(%esp), %dl 271; X86-NEXT: shlb $4, %dl 272; X86-NEXT: sarb $4, %dl 273; X86-NEXT: shlb $2, %dl 274; X86-NEXT: movsbl %dl, %eax 275; X86-NEXT: idivb %cl 276; X86-NEXT: movsbl %ah, %ebx 277; X86-NEXT: movzbl %al, %esi 278; X86-NEXT: decb %al 279; X86-NEXT: movzbl %al, %eax 280; X86-NEXT: testb %cl, %cl 281; X86-NEXT: sets %cl 282; X86-NEXT: testb %dl, %dl 283; X86-NEXT: sets %dl 284; X86-NEXT: xorb %cl, %dl 285; X86-NEXT: testb %bl, %bl 286; X86-NEXT: setne %cl 287; X86-NEXT: testb %dl, %cl 288; X86-NEXT: cmovel %esi, %eax 289; X86-NEXT: cmpb $7, %al 290; X86-NEXT: movl $7, %ecx 291; X86-NEXT: cmovll %eax, %ecx 292; X86-NEXT: cmpb $-7, %cl 293; X86-NEXT: movl $248, %eax 294; X86-NEXT: cmovgel %ecx, %eax 295; X86-NEXT: # kill: def $al killed $al killed $eax 296; X86-NEXT: popl %esi 297; X86-NEXT: popl %ebx 298; X86-NEXT: retl 299 %tmp = call i4 @llvm.sdiv.fix.sat.i4(i4 %x, i4 %y, i32 2) 300 ret i4 %tmp 301} 302 303define i64 @func5(i64 %x, i64 %y) nounwind { 304; 305; X64-LABEL: func5: 306; X64: # %bb.0: 307; X64-NEXT: pushq %rbp 308; X64-NEXT: pushq %r15 309; X64-NEXT: pushq %r14 310; X64-NEXT: pushq %r13 311; X64-NEXT: pushq %r12 312; X64-NEXT: pushq %rbx 313; X64-NEXT: subq $24, %rsp 314; X64-NEXT: movq %rsi, %rdx 315; X64-NEXT: movq %rsi, (%rsp) # 8-byte Spill 316; X64-NEXT: movq %rdi, %r15 317; X64-NEXT: leaq (%rdi,%rdi), %rax 318; X64-NEXT: movq %rdi, %r12 319; X64-NEXT: sarq $63, %r12 320; X64-NEXT: shldq $31, %rax, %r12 321; X64-NEXT: shlq $32, %r15 322; X64-NEXT: movq %rsi, %r13 323; X64-NEXT: sarq $63, %r13 324; X64-NEXT: movq %r15, %rdi 325; X64-NEXT: movq %r12, %rsi 326; X64-NEXT: movq %r13, %rcx 327; X64-NEXT: callq __divti3@PLT 328; X64-NEXT: movq %rax, %rbx 329; X64-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 330; X64-NEXT: movq %rdx, %rbp 331; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 332; X64-NEXT: subq $1, %rbx 333; X64-NEXT: sbbq $0, %rbp 334; X64-NEXT: testq %r12, %r12 335; X64-NEXT: sets %al 336; X64-NEXT: testq %r13, %r13 337; X64-NEXT: sets %r14b 338; X64-NEXT: xorb %al, %r14b 339; X64-NEXT: movq %r15, %rdi 340; X64-NEXT: movq %r12, %rsi 341; X64-NEXT: movq (%rsp), %rdx # 8-byte Reload 342; X64-NEXT: movq %r13, %rcx 343; X64-NEXT: callq __modti3@PLT 344; X64-NEXT: orq %rax, %rdx 345; X64-NEXT: setne %al 346; X64-NEXT: testb %r14b, %al 347; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %rbp # 8-byte Folded Reload 348; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %rbx # 8-byte Folded Reload 349; X64-NEXT: xorl %eax, %eax 350; X64-NEXT: testq %rbp, %rbp 351; X64-NEXT: cmovnsq %rax, %rbp 352; X64-NEXT: movq $-1, %rcx 353; X64-NEXT: cmovgq %rcx, %rbx 354; X64-NEXT: testq %rbp, %rbp 355; X64-NEXT: cmovnsq %rbp, %rcx 356; X64-NEXT: cmpq $-1, %rbp 357; X64-NEXT: cmovlq %rax, %rbx 358; X64-NEXT: shrdq $1, %rcx, %rbx 359; X64-NEXT: movq %rbx, %rax 360; X64-NEXT: addq $24, %rsp 361; X64-NEXT: popq %rbx 362; X64-NEXT: popq %r12 363; X64-NEXT: popq %r13 364; X64-NEXT: popq %r14 365; X64-NEXT: popq %r15 366; X64-NEXT: popq %rbp 367; X64-NEXT: retq 368; 369; X86-LABEL: func5: 370; X86: # %bb.0: 371; X86-NEXT: pushl %ebp 372; X86-NEXT: movl %esp, %ebp 373; X86-NEXT: pushl %ebx 374; X86-NEXT: pushl %edi 375; X86-NEXT: pushl %esi 376; X86-NEXT: andl $-8, %esp 377; X86-NEXT: subl $88, %esp 378; X86-NEXT: movl 8(%ebp), %ecx 379; X86-NEXT: movl 12(%ebp), %eax 380; X86-NEXT: movl 20(%ebp), %edi 381; X86-NEXT: sarl $31, %edi 382; X86-NEXT: movl %eax, %ebx 383; X86-NEXT: sarl $31, %ebx 384; X86-NEXT: movl %ebx, %edx 385; X86-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 386; X86-NEXT: shldl $31, %eax, %edx 387; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 388; X86-NEXT: shldl $31, %ecx, %eax 389; X86-NEXT: movl %eax, %esi 390; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 391; X86-NEXT: shll $31, %ecx 392; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 393; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 394; X86-NEXT: pushl %edi 395; X86-NEXT: pushl %edi 396; X86-NEXT: pushl 20(%ebp) 397; X86-NEXT: pushl 16(%ebp) 398; X86-NEXT: pushl %ebx 399; X86-NEXT: pushl %edx 400; X86-NEXT: pushl %esi 401; X86-NEXT: pushl %ecx 402; X86-NEXT: pushl %eax 403; X86-NEXT: calll __divti3 404; X86-NEXT: addl $32, %esp 405; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 406; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 407; X86-NEXT: movl {{[0-9]+}}(%esp), %esi 408; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 409; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 410; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 411; X86-NEXT: subl $1, %esi 412; X86-NEXT: movl %ecx, %eax 413; X86-NEXT: sbbl $0, %eax 414; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 415; X86-NEXT: movl %edx, %eax 416; X86-NEXT: sbbl $0, %eax 417; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 418; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx 419; X86-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 420; X86-NEXT: sbbl $0, %ebx 421; X86-NEXT: testl %edi, %edi 422; X86-NEXT: sets %al 423; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 424; X86-NEXT: testl %ecx, %ecx 425; X86-NEXT: sets %dl 426; X86-NEXT: xorb %al, %dl 427; X86-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill 428; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 429; X86-NEXT: pushl %edi 430; X86-NEXT: pushl %edi 431; X86-NEXT: pushl 20(%ebp) 432; X86-NEXT: pushl 16(%ebp) 433; X86-NEXT: pushl %ecx 434; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 435; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 436; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 437; X86-NEXT: pushl %eax 438; X86-NEXT: calll __modti3 439; X86-NEXT: addl $32, %esp 440; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 441; X86-NEXT: orl {{[0-9]+}}(%esp), %eax 442; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 443; X86-NEXT: orl {{[0-9]+}}(%esp), %ecx 444; X86-NEXT: orl %eax, %ecx 445; X86-NEXT: setne %al 446; X86-NEXT: testb %al, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Reload 447; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 448; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 449; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 450; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload 451; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 452; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload 453; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload 454; X86-NEXT: testl %ebx, %ebx 455; X86-NEXT: movl $0, %eax 456; X86-NEXT: cmovsl %ebx, %eax 457; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 458; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF 459; X86-NEXT: cmovsl %edx, %eax 460; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 461; X86-NEXT: movl $-1, %eax 462; X86-NEXT: cmovsl %esi, %eax 463; X86-NEXT: movl %ebx, %edi 464; X86-NEXT: sarl $31, %edi 465; X86-NEXT: andl %ecx, %edi 466; X86-NEXT: testl %ebx, %ebx 467; X86-NEXT: cmovel %ebx, %edi 468; X86-NEXT: movl %edx, %ecx 469; X86-NEXT: cmpl $2147483647, %edx # imm = 0x7FFFFFFF 470; X86-NEXT: movl $2147483647, %edx # imm = 0x7FFFFFFF 471; X86-NEXT: cmovbl %ecx, %edx 472; X86-NEXT: testl %ecx, %ecx 473; X86-NEXT: movl $-1, %ecx 474; X86-NEXT: cmovsl %ecx, %esi 475; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload 476; X86-NEXT: cmovnel %eax, %esi 477; X86-NEXT: cmovnel {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload 478; X86-NEXT: cmpl $-2147483647, %edx # imm = 0x80000001 479; X86-NEXT: movl $-2147483648, %eax # imm = 0x80000000 480; X86-NEXT: cmovael %edx, %eax 481; X86-NEXT: movl %edx, %ecx 482; X86-NEXT: sarl $31, %ecx 483; X86-NEXT: andl %esi, %ecx 484; X86-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 485; X86-NEXT: movl $-2147483648, %ebx # imm = 0x80000000 486; X86-NEXT: cmovsl %ebx, %edx 487; X86-NEXT: movl $0, %ebx 488; X86-NEXT: cmovsl %ebx, %esi 489; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload 490; X86-NEXT: cmpl $-1, %edi 491; X86-NEXT: cmovel %ecx, %esi 492; X86-NEXT: cmovel %eax, %edx 493; X86-NEXT: movl %esi, %eax 494; X86-NEXT: leal -12(%ebp), %esp 495; X86-NEXT: popl %esi 496; X86-NEXT: popl %edi 497; X86-NEXT: popl %ebx 498; X86-NEXT: popl %ebp 499; X86-NEXT: retl 500 %tmp = call i64 @llvm.sdiv.fix.sat.i64(i64 %x, i64 %y, i32 31) 501 ret i64 %tmp 502} 503 504define i18 @func6(i16 %x, i16 %y) nounwind { 505; 506; X64-LABEL: func6: 507; X64: # %bb.0: 508; X64-NEXT: movswl %di, %ecx 509; X64-NEXT: movswl %si, %esi 510; X64-NEXT: shll $7, %ecx 511; X64-NEXT: movl %ecx, %eax 512; X64-NEXT: cltd 513; X64-NEXT: idivl %esi 514; X64-NEXT: # kill: def $eax killed $eax def $rax 515; X64-NEXT: leal -1(%rax), %edi 516; X64-NEXT: testl %esi, %esi 517; X64-NEXT: sets %sil 518; X64-NEXT: testl %ecx, %ecx 519; X64-NEXT: sets %cl 520; X64-NEXT: xorb %sil, %cl 521; X64-NEXT: testl %edx, %edx 522; X64-NEXT: setne %dl 523; X64-NEXT: testb %cl, %dl 524; X64-NEXT: cmovnel %edi, %eax 525; X64-NEXT: cmpl $131071, %eax # imm = 0x1FFFF 526; X64-NEXT: movl $131071, %ecx # imm = 0x1FFFF 527; X64-NEXT: cmovgel %ecx, %eax 528; X64-NEXT: cmpl $-131071, %eax # imm = 0xFFFE0001 529; X64-NEXT: movl $-131072, %ecx # imm = 0xFFFE0000 530; X64-NEXT: cmovll %ecx, %eax 531; X64-NEXT: # kill: def $eax killed $eax killed $rax 532; X64-NEXT: retq 533; 534; X86-LABEL: func6: 535; X86: # %bb.0: 536; X86-NEXT: pushl %ebx 537; X86-NEXT: pushl %edi 538; X86-NEXT: pushl %esi 539; X86-NEXT: movswl {{[0-9]+}}(%esp), %esi 540; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx 541; X86-NEXT: shll $7, %ecx 542; X86-NEXT: movl %ecx, %eax 543; X86-NEXT: cltd 544; X86-NEXT: idivl %esi 545; X86-NEXT: leal -1(%eax), %edi 546; X86-NEXT: testl %esi, %esi 547; X86-NEXT: sets %bl 548; X86-NEXT: testl %ecx, %ecx 549; X86-NEXT: sets %cl 550; X86-NEXT: xorb %bl, %cl 551; X86-NEXT: testl %edx, %edx 552; X86-NEXT: setne %dl 553; X86-NEXT: testb %cl, %dl 554; X86-NEXT: cmovnel %edi, %eax 555; X86-NEXT: cmpl $131071, %eax # imm = 0x1FFFF 556; X86-NEXT: movl $131071, %ecx # imm = 0x1FFFF 557; X86-NEXT: cmovgel %ecx, %eax 558; X86-NEXT: cmpl $-131071, %eax # imm = 0xFFFE0001 559; X86-NEXT: movl $-131072, %ecx # imm = 0xFFFE0000 560; X86-NEXT: cmovll %ecx, %eax 561; X86-NEXT: popl %esi 562; X86-NEXT: popl %edi 563; X86-NEXT: popl %ebx 564; X86-NEXT: retl 565 %x2 = sext i16 %x to i18 566 %y2 = sext i16 %y to i18 567 %tmp = call i18 @llvm.sdiv.fix.sat.i18(i18 %x2, i18 %y2, i32 7) 568 ret i18 %tmp 569} 570 571define <4 x i32> @vec(<4 x i32> %x, <4 x i32> %y) nounwind { 572; 573; X64-LABEL: vec: 574; X64: # %bb.0: 575; X64-NEXT: pushq %rbp 576; X64-NEXT: pushq %r15 577; X64-NEXT: pushq %r14 578; X64-NEXT: pushq %r13 579; X64-NEXT: pushq %r12 580; X64-NEXT: pushq %rbx 581; X64-NEXT: subq $104, %rsp 582; X64-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 583; X64-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 584; X64-NEXT: pxor %xmm2, %xmm2 585; X64-NEXT: pcmpgtd %xmm0, %xmm2 586; X64-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 587; X64-NEXT: paddq %xmm0, %xmm0 588; X64-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 589; X64-NEXT: movq %xmm0, %rbx 590; X64-NEXT: movq %rbx, %rbp 591; X64-NEXT: sarq $63, %rbp 592; X64-NEXT: shldq $31, %rbx, %rbp 593; X64-NEXT: pxor %xmm0, %xmm0 594; X64-NEXT: pcmpgtd %xmm1, %xmm0 595; X64-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 596; X64-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 597; X64-NEXT: movq %xmm1, %rdx 598; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 599; X64-NEXT: movq %rdx, %r15 600; X64-NEXT: sarq $63, %r15 601; X64-NEXT: movq %rbx, %r12 602; X64-NEXT: shlq $31, %r12 603; X64-NEXT: movq %r12, %rdi 604; X64-NEXT: movq %rbp, %rsi 605; X64-NEXT: movq %r15, %rcx 606; X64-NEXT: callq __divti3@PLT 607; X64-NEXT: movq %rax, %r13 608; X64-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 609; X64-NEXT: movq %rdx, %r14 610; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 611; X64-NEXT: subq $1, %r13 612; X64-NEXT: sbbq $0, %r14 613; X64-NEXT: shrq $63, %rbx 614; X64-NEXT: xorl %r15d, %ebx 615; X64-NEXT: movq %r12, %rdi 616; X64-NEXT: movq %rbp, %rsi 617; X64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload 618; X64-NEXT: movq %r15, %rcx 619; X64-NEXT: callq __modti3@PLT 620; X64-NEXT: orq %rax, %rdx 621; X64-NEXT: setne %al 622; X64-NEXT: testb %bl, %al 623; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Folded Reload 624; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Folded Reload 625; X64-NEXT: movl $4294967295, %edx # imm = 0xFFFFFFFF 626; X64-NEXT: cmpq %rdx, %r13 627; X64-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF 628; X64-NEXT: cmovbq %r13, %rax 629; X64-NEXT: xorl %ecx, %ecx 630; X64-NEXT: testq %r14, %r14 631; X64-NEXT: cmovnsq %rdx, %r13 632; X64-NEXT: cmoveq %rax, %r13 633; X64-NEXT: cmovnsq %rcx, %r14 634; X64-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000 635; X64-NEXT: cmpq %rcx, %r13 636; X64-NEXT: movq %rcx, %rax 637; X64-NEXT: cmovaq %r13, %rax 638; X64-NEXT: testq %r14, %r14 639; X64-NEXT: cmovsq %rcx, %r13 640; X64-NEXT: cmpq $-1, %r14 641; X64-NEXT: cmoveq %rax, %r13 642; X64-NEXT: movq %r13, %xmm0 643; X64-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 644; X64-NEXT: pshufd $238, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 645; X64-NEXT: # xmm0 = mem[2,3,2,3] 646; X64-NEXT: movq %xmm0, %rbx 647; X64-NEXT: movq %rbx, %r13 648; X64-NEXT: sarq $63, %r13 649; X64-NEXT: shldq $31, %rbx, %r13 650; X64-NEXT: pshufd $238, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 651; X64-NEXT: # xmm0 = mem[2,3,2,3] 652; X64-NEXT: movq %xmm0, %rdx 653; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 654; X64-NEXT: movq %rdx, %rbp 655; X64-NEXT: sarq $63, %rbp 656; X64-NEXT: movq %rbx, %r15 657; X64-NEXT: shlq $31, %r15 658; X64-NEXT: movq %r15, %rdi 659; X64-NEXT: movq %r13, %rsi 660; X64-NEXT: movq %rbp, %rcx 661; X64-NEXT: callq __divti3@PLT 662; X64-NEXT: movq %rax, %r12 663; X64-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 664; X64-NEXT: movq %rdx, %r14 665; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 666; X64-NEXT: subq $1, %r12 667; X64-NEXT: sbbq $0, %r14 668; X64-NEXT: shrq $63, %rbx 669; X64-NEXT: xorl %ebp, %ebx 670; X64-NEXT: movq %r15, %rdi 671; X64-NEXT: movq %r13, %rsi 672; X64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload 673; X64-NEXT: movq %rbp, %rcx 674; X64-NEXT: callq __modti3@PLT 675; X64-NEXT: orq %rax, %rdx 676; X64-NEXT: setne %al 677; X64-NEXT: testb %bl, %al 678; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Folded Reload 679; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Folded Reload 680; X64-NEXT: movl $4294967295, %ecx # imm = 0xFFFFFFFF 681; X64-NEXT: cmpq %rcx, %r12 682; X64-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF 683; X64-NEXT: cmovbq %r12, %rax 684; X64-NEXT: testq %r14, %r14 685; X64-NEXT: cmovnsq %rcx, %r12 686; X64-NEXT: cmoveq %rax, %r12 687; X64-NEXT: movl $0, %eax 688; X64-NEXT: cmovnsq %rax, %r14 689; X64-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000 690; X64-NEXT: cmpq %rcx, %r12 691; X64-NEXT: movq %rcx, %rax 692; X64-NEXT: cmovaq %r12, %rax 693; X64-NEXT: testq %r14, %r14 694; X64-NEXT: cmovsq %rcx, %r12 695; X64-NEXT: cmpq $-1, %r14 696; X64-NEXT: cmoveq %rax, %r12 697; X64-NEXT: movq %r12, %xmm0 698; X64-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 699; X64-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0] 700; X64-NEXT: psrlq $1, %xmm1 701; X64-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 702; X64-NEXT: pshufd $238, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 703; X64-NEXT: # xmm1 = mem[2,3,2,3] 704; X64-NEXT: pxor %xmm0, %xmm0 705; X64-NEXT: pcmpgtd %xmm1, %xmm0 706; X64-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 707; X64-NEXT: paddq %xmm1, %xmm1 708; X64-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 709; X64-NEXT: movq %xmm1, %rbx 710; X64-NEXT: movq %rbx, %r12 711; X64-NEXT: sarq $63, %r12 712; X64-NEXT: shldq $31, %rbx, %r12 713; X64-NEXT: pshufd $238, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload 714; X64-NEXT: # xmm1 = mem[2,3,2,3] 715; X64-NEXT: pxor %xmm0, %xmm0 716; X64-NEXT: pcmpgtd %xmm1, %xmm0 717; X64-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 718; X64-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 719; X64-NEXT: movq %xmm1, %rdx 720; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 721; X64-NEXT: movq %rdx, %rbp 722; X64-NEXT: sarq $63, %rbp 723; X64-NEXT: movq %rbx, %r15 724; X64-NEXT: shlq $31, %r15 725; X64-NEXT: movq %r15, %rdi 726; X64-NEXT: movq %r12, %rsi 727; X64-NEXT: movq %rbp, %rcx 728; X64-NEXT: callq __divti3@PLT 729; X64-NEXT: movq %rax, %r13 730; X64-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 731; X64-NEXT: movq %rdx, %r14 732; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 733; X64-NEXT: subq $1, %r13 734; X64-NEXT: sbbq $0, %r14 735; X64-NEXT: shrq $63, %rbx 736; X64-NEXT: xorl %ebp, %ebx 737; X64-NEXT: movq %r15, %rdi 738; X64-NEXT: movq %r12, %rsi 739; X64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload 740; X64-NEXT: movq %rbp, %rcx 741; X64-NEXT: callq __modti3@PLT 742; X64-NEXT: orq %rax, %rdx 743; X64-NEXT: setne %al 744; X64-NEXT: testb %bl, %al 745; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Folded Reload 746; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r13 # 8-byte Folded Reload 747; X64-NEXT: movl $4294967295, %ecx # imm = 0xFFFFFFFF 748; X64-NEXT: cmpq %rcx, %r13 749; X64-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF 750; X64-NEXT: cmovbq %r13, %rax 751; X64-NEXT: testq %r14, %r14 752; X64-NEXT: cmovnsq %rcx, %r13 753; X64-NEXT: cmoveq %rax, %r13 754; X64-NEXT: movl $0, %eax 755; X64-NEXT: cmovnsq %rax, %r14 756; X64-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000 757; X64-NEXT: cmpq %rcx, %r13 758; X64-NEXT: movq %rcx, %rax 759; X64-NEXT: cmovaq %r13, %rax 760; X64-NEXT: testq %r14, %r14 761; X64-NEXT: cmovsq %rcx, %r13 762; X64-NEXT: cmpq $-1, %r14 763; X64-NEXT: cmoveq %rax, %r13 764; X64-NEXT: movq %r13, %xmm0 765; X64-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill 766; X64-NEXT: pshufd $238, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 767; X64-NEXT: # xmm0 = mem[2,3,2,3] 768; X64-NEXT: movq %xmm0, %rbx 769; X64-NEXT: movq %rbx, %r13 770; X64-NEXT: sarq $63, %r13 771; X64-NEXT: shldq $31, %rbx, %r13 772; X64-NEXT: pshufd $238, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload 773; X64-NEXT: # xmm0 = mem[2,3,2,3] 774; X64-NEXT: movq %xmm0, %rdx 775; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 776; X64-NEXT: movq %rdx, %rbp 777; X64-NEXT: sarq $63, %rbp 778; X64-NEXT: movq %rbx, %r15 779; X64-NEXT: shlq $31, %r15 780; X64-NEXT: movq %r15, %rdi 781; X64-NEXT: movq %r13, %rsi 782; X64-NEXT: movq %rbp, %rcx 783; X64-NEXT: callq __divti3@PLT 784; X64-NEXT: movq %rax, %r12 785; X64-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 786; X64-NEXT: movq %rdx, %r14 787; X64-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill 788; X64-NEXT: subq $1, %r12 789; X64-NEXT: sbbq $0, %r14 790; X64-NEXT: shrq $63, %rbx 791; X64-NEXT: xorl %ebp, %ebx 792; X64-NEXT: movq %r15, %rdi 793; X64-NEXT: movq %r13, %rsi 794; X64-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdx # 8-byte Reload 795; X64-NEXT: movq %rbp, %rcx 796; X64-NEXT: callq __modti3@PLT 797; X64-NEXT: orq %rax, %rdx 798; X64-NEXT: setne %al 799; X64-NEXT: testb %bl, %al 800; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Folded Reload 801; X64-NEXT: cmoveq {{[-0-9]+}}(%r{{[sb]}}p), %r12 # 8-byte Folded Reload 802; X64-NEXT: movl $4294967295, %ecx # imm = 0xFFFFFFFF 803; X64-NEXT: cmpq %rcx, %r12 804; X64-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF 805; X64-NEXT: cmovbq %r12, %rax 806; X64-NEXT: testq %r14, %r14 807; X64-NEXT: cmovnsq %rcx, %r12 808; X64-NEXT: cmoveq %rax, %r12 809; X64-NEXT: movl $0, %eax 810; X64-NEXT: cmovnsq %rax, %r14 811; X64-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000 812; X64-NEXT: cmpq %rcx, %r12 813; X64-NEXT: movq %rcx, %rax 814; X64-NEXT: cmovaq %r12, %rax 815; X64-NEXT: testq %r14, %r14 816; X64-NEXT: cmovsq %rcx, %r12 817; X64-NEXT: cmpq $-1, %r14 818; X64-NEXT: cmoveq %rax, %r12 819; X64-NEXT: movq %r12, %xmm0 820; X64-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload 821; X64-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0] 822; X64-NEXT: psrlq $1, %xmm1 823; X64-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload 824; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] 825; X64-NEXT: addq $104, %rsp 826; X64-NEXT: popq %rbx 827; X64-NEXT: popq %r12 828; X64-NEXT: popq %r13 829; X64-NEXT: popq %r14 830; X64-NEXT: popq %r15 831; X64-NEXT: popq %rbp 832; X64-NEXT: retq 833; 834; X86-LABEL: vec: 835; X86: # %bb.0: 836; X86-NEXT: pushl %ebp 837; X86-NEXT: movl %esp, %ebp 838; X86-NEXT: pushl %ebx 839; X86-NEXT: pushl %edi 840; X86-NEXT: pushl %esi 841; X86-NEXT: andl $-8, %esp 842; X86-NEXT: subl $256, %esp # imm = 0x100 843; X86-NEXT: movl 24(%ebp), %edx 844; X86-NEXT: movl 40(%ebp), %edi 845; X86-NEXT: leal {{[0-9]+}}(%esp), %ebx 846; X86-NEXT: movl %edi, %esi 847; X86-NEXT: sarl $31, %esi 848; X86-NEXT: movl %edx, %eax 849; X86-NEXT: sarl $31, %eax 850; X86-NEXT: addl %edx, %edx 851; X86-NEXT: adcl %eax, %eax 852; X86-NEXT: movl %eax, %ecx 853; X86-NEXT: shldl $31, %edx, %ecx 854; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 855; X86-NEXT: shll $31, %edx 856; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 857; X86-NEXT: andl $1, %eax 858; X86-NEXT: negl %eax 859; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 860; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 861; X86-NEXT: pushl %esi 862; X86-NEXT: pushl %esi 863; X86-NEXT: pushl %esi 864; X86-NEXT: pushl %edi 865; X86-NEXT: pushl %eax 866; X86-NEXT: pushl %eax 867; X86-NEXT: pushl %ecx 868; X86-NEXT: pushl %edx 869; X86-NEXT: pushl %ebx 870; X86-NEXT: calll __modti3 871; X86-NEXT: addl $32, %esp 872; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 873; X86-NEXT: movl 36(%ebp), %esi 874; X86-NEXT: movl %esi, %edi 875; X86-NEXT: sarl $31, %edi 876; X86-NEXT: movl 20(%ebp), %ecx 877; X86-NEXT: movl %ecx, %edx 878; X86-NEXT: sarl $31, %edx 879; X86-NEXT: addl %ecx, %ecx 880; X86-NEXT: adcl %edx, %edx 881; X86-NEXT: movl %edx, %ebx 882; X86-NEXT: shldl $31, %ecx, %ebx 883; X86-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 884; X86-NEXT: shll $31, %ecx 885; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 886; X86-NEXT: andl $1, %edx 887; X86-NEXT: negl %edx 888; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 889; X86-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 890; X86-NEXT: pushl %edi 891; X86-NEXT: pushl %edi 892; X86-NEXT: pushl %edi 893; X86-NEXT: pushl %esi 894; X86-NEXT: pushl %edx 895; X86-NEXT: pushl %edx 896; X86-NEXT: pushl %ebx 897; X86-NEXT: pushl %ecx 898; X86-NEXT: pushl %eax 899; X86-NEXT: calll __modti3 900; X86-NEXT: addl $32, %esp 901; X86-NEXT: leal {{[0-9]+}}(%esp), %edi 902; X86-NEXT: movl 28(%ebp), %ebx 903; X86-NEXT: movl %ebx, %edx 904; X86-NEXT: sarl $31, %edx 905; X86-NEXT: movl 12(%ebp), %eax 906; X86-NEXT: movl %eax, %esi 907; X86-NEXT: sarl $31, %esi 908; X86-NEXT: addl %eax, %eax 909; X86-NEXT: adcl %esi, %esi 910; X86-NEXT: movl %esi, %ecx 911; X86-NEXT: shldl $31, %eax, %ecx 912; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 913; X86-NEXT: shll $31, %eax 914; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 915; X86-NEXT: andl $1, %esi 916; X86-NEXT: negl %esi 917; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 918; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 919; X86-NEXT: pushl %edx 920; X86-NEXT: pushl %edx 921; X86-NEXT: pushl %edx 922; X86-NEXT: pushl %ebx 923; X86-NEXT: pushl %esi 924; X86-NEXT: pushl %esi 925; X86-NEXT: pushl %ecx 926; X86-NEXT: pushl %eax 927; X86-NEXT: pushl %edi 928; X86-NEXT: calll __divti3 929; X86-NEXT: addl $32, %esp 930; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 931; X86-NEXT: movl 32(%ebp), %edx 932; X86-NEXT: movl %edx, %esi 933; X86-NEXT: sarl $31, %esi 934; X86-NEXT: movl 16(%ebp), %ecx 935; X86-NEXT: movl %ecx, %ebx 936; X86-NEXT: sarl $31, %ebx 937; X86-NEXT: addl %ecx, %ecx 938; X86-NEXT: adcl %ebx, %ebx 939; X86-NEXT: movl %ebx, %edi 940; X86-NEXT: shldl $31, %ecx, %edi 941; X86-NEXT: shll $31, %ecx 942; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 943; X86-NEXT: andl $1, %ebx 944; X86-NEXT: negl %ebx 945; X86-NEXT: pushl %esi 946; X86-NEXT: pushl %esi 947; X86-NEXT: pushl %esi 948; X86-NEXT: pushl %edx 949; X86-NEXT: pushl %ebx 950; X86-NEXT: pushl %ebx 951; X86-NEXT: pushl %edi 952; X86-NEXT: pushl %ecx 953; X86-NEXT: pushl %eax 954; X86-NEXT: calll __modti3 955; X86-NEXT: addl $32, %esp 956; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 957; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 958; X86-NEXT: pushl %esi 959; X86-NEXT: pushl %esi 960; X86-NEXT: pushl %esi 961; X86-NEXT: pushl 32(%ebp) 962; X86-NEXT: pushl %ebx 963; X86-NEXT: pushl %ebx 964; X86-NEXT: pushl %edi 965; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 966; X86-NEXT: pushl %eax 967; X86-NEXT: calll __divti3 968; X86-NEXT: addl $32, %esp 969; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 970; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 971; X86-NEXT: pushl %ecx 972; X86-NEXT: pushl %ecx 973; X86-NEXT: pushl %ecx 974; X86-NEXT: pushl 40(%ebp) 975; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 976; X86-NEXT: pushl %ecx 977; X86-NEXT: pushl %ecx 978; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 979; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 980; X86-NEXT: pushl %eax 981; X86-NEXT: calll __divti3 982; X86-NEXT: addl $32, %esp 983; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 984; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 985; X86-NEXT: pushl %ecx 986; X86-NEXT: pushl %ecx 987; X86-NEXT: pushl %ecx 988; X86-NEXT: pushl 36(%ebp) 989; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 990; X86-NEXT: pushl %edi 991; X86-NEXT: pushl %edi 992; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 993; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 994; X86-NEXT: pushl %eax 995; X86-NEXT: calll __divti3 996; X86-NEXT: addl $32, %esp 997; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 998; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 999; X86-NEXT: subl $1, %eax 1000; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1001; X86-NEXT: movl {{[0-9]+}}(%esp), %esi 1002; X86-NEXT: movl %esi, %edx 1003; X86-NEXT: sbbl $0, %edx 1004; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1005; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1006; X86-NEXT: sbbl $0, %eax 1007; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1008; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1009; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1010; X86-NEXT: sbbl $0, %eax 1011; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1012; X86-NEXT: testl %edi, %edi 1013; X86-NEXT: sets %al 1014; X86-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 1015; X86-NEXT: sets %ah 1016; X86-NEXT: xorb %al, %ah 1017; X86-NEXT: movl {{[0-9]+}}(%esp), %edi 1018; X86-NEXT: orl {{[0-9]+}}(%esp), %edi 1019; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 1020; X86-NEXT: orl {{[0-9]+}}(%esp), %ecx 1021; X86-NEXT: orl %edi, %ecx 1022; X86-NEXT: setne %al 1023; X86-NEXT: testb %ah, %al 1024; X86-NEXT: cmovel %esi, %edx 1025; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1026; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1027; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1028; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1029; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1030; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1031; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1032; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1033; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1034; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1035; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1036; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1037; X86-NEXT: subl $1, %eax 1038; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1039; X86-NEXT: movl {{[0-9]+}}(%esp), %esi 1040; X86-NEXT: movl %esi, %ecx 1041; X86-NEXT: sbbl $0, %ecx 1042; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 1043; X86-NEXT: movl %edx, %eax 1044; X86-NEXT: sbbl $0, %eax 1045; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1046; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1047; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1048; X86-NEXT: sbbl $0, %eax 1049; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1050; X86-NEXT: testl %ebx, %ebx 1051; X86-NEXT: sets %bl 1052; X86-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 1053; X86-NEXT: sets %bh 1054; X86-NEXT: xorb %bl, %bh 1055; X86-NEXT: movl {{[0-9]+}}(%esp), %edi 1056; X86-NEXT: orl {{[0-9]+}}(%esp), %edi 1057; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1058; X86-NEXT: orl {{[0-9]+}}(%esp), %eax 1059; X86-NEXT: orl %edi, %eax 1060; X86-NEXT: setne %al 1061; X86-NEXT: testb %bh, %al 1062; X86-NEXT: cmovel %esi, %ecx 1063; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1064; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1065; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1066; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1067; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1068; X86-NEXT: cmovel %edx, %eax 1069; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1070; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1071; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1072; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1073; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1074; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1075; X86-NEXT: subl $1, %eax 1076; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1077; X86-NEXT: movl {{[0-9]+}}(%esp), %edi 1078; X86-NEXT: movl %edi, %esi 1079; X86-NEXT: sbbl $0, %esi 1080; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1081; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1082; X86-NEXT: sbbl $0, %eax 1083; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1084; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1085; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1086; X86-NEXT: sbbl $0, %eax 1087; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1088; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1089; X86-NEXT: testl %ecx, %ecx 1090; X86-NEXT: sets %al 1091; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 1092; X86-NEXT: testl %edx, %edx 1093; X86-NEXT: sets %bl 1094; X86-NEXT: xorb %al, %bl 1095; X86-NEXT: leal {{[0-9]+}}(%esp), %eax 1096; X86-NEXT: pushl %edx 1097; X86-NEXT: pushl %edx 1098; X86-NEXT: pushl %edx 1099; X86-NEXT: pushl 28(%ebp) 1100; X86-NEXT: pushl %ecx 1101; X86-NEXT: pushl %ecx 1102; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 1103; X86-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 1104; X86-NEXT: pushl %eax 1105; X86-NEXT: calll __modti3 1106; X86-NEXT: addl $32, %esp 1107; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1108; X86-NEXT: orl {{[0-9]+}}(%esp), %eax 1109; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 1110; X86-NEXT: orl {{[0-9]+}}(%esp), %ecx 1111; X86-NEXT: orl %eax, %ecx 1112; X86-NEXT: setne %al 1113; X86-NEXT: testb %bl, %al 1114; X86-NEXT: cmovel %edi, %esi 1115; X86-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1116; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1117; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1118; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1119; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1120; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1121; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1122; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1123; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1124; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1125; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 1126; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1127; X86-NEXT: subl $1, %ecx 1128; X86-NEXT: movl {{[0-9]+}}(%esp), %esi 1129; X86-NEXT: movl %esi, %eax 1130; X86-NEXT: sbbl $0, %eax 1131; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1132; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1133; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1134; X86-NEXT: sbbl $0, %eax 1135; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1136; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 1137; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1138; X86-NEXT: sbbl $0, %edx 1139; X86-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 1140; X86-NEXT: sets %bl 1141; X86-NEXT: cmpl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload 1142; X86-NEXT: sets %bh 1143; X86-NEXT: xorb %bl, %bh 1144; X86-NEXT: movl {{[0-9]+}}(%esp), %edi 1145; X86-NEXT: orl {{[0-9]+}}(%esp), %edi 1146; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 1147; X86-NEXT: orl {{[0-9]+}}(%esp), %eax 1148; X86-NEXT: orl %edi, %eax 1149; X86-NEXT: setne %al 1150; X86-NEXT: testb %bh, %al 1151; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1152; X86-NEXT: cmovel %esi, %eax 1153; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1154; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1155; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1156; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1157; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1158; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1159; X86-NEXT: cmovel {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload 1160; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1161; X86-NEXT: testl %edx, %edx 1162; X86-NEXT: movl $0, %eax 1163; X86-NEXT: cmovsl %edx, %eax 1164; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1165; X86-NEXT: movl $-1, %eax 1166; X86-NEXT: cmovsl %ecx, %eax 1167; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1168; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1169; X86-NEXT: movl %eax, %ecx 1170; X86-NEXT: sarl $31, %ecx 1171; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1172; X86-NEXT: movl %ecx, %edx 1173; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload 1174; X86-NEXT: testl %eax, %eax 1175; X86-NEXT: cmovel %eax, %edx 1176; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1177; X86-NEXT: movl $0, %ecx 1178; X86-NEXT: cmovsl %eax, %ecx 1179; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1180; X86-NEXT: movl $-1, %eax 1181; X86-NEXT: cmovsl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1182; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1183; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1184; X86-NEXT: movl %eax, %edi 1185; X86-NEXT: sarl $31, %edi 1186; X86-NEXT: movl %edi, %ecx 1187; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1188; X86-NEXT: testl %eax, %eax 1189; X86-NEXT: cmovel %eax, %ecx 1190; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1191; X86-NEXT: movl $0, %ecx 1192; X86-NEXT: cmovsl %eax, %ecx 1193; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1194; X86-NEXT: movl $-1, %eax 1195; X86-NEXT: cmovsl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1196; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1197; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1198; X86-NEXT: movl %ecx, %ebx 1199; X86-NEXT: sarl $31, %ebx 1200; X86-NEXT: movl %ebx, %eax 1201; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1202; X86-NEXT: testl %ecx, %ecx 1203; X86-NEXT: cmovel %ecx, %eax 1204; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1205; X86-NEXT: movl $0, %eax 1206; X86-NEXT: cmovsl %ecx, %eax 1207; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1208; X86-NEXT: movl %ecx, %edx 1209; X86-NEXT: movl $-1, %esi 1210; X86-NEXT: cmovsl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload 1211; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1212; X86-NEXT: movl %eax, %ecx 1213; X86-NEXT: sarl $31, %ecx 1214; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1215; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1216; X86-NEXT: testl %eax, %eax 1217; X86-NEXT: cmovel %eax, %ecx 1218; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1219; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1220; X86-NEXT: andl %eax, %ebx 1221; X86-NEXT: negl %eax 1222; X86-NEXT: movl $0, %ecx 1223; X86-NEXT: sbbl %ecx, %ecx 1224; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1225; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload 1226; X86-NEXT: cmovnel %esi, %ecx 1227; X86-NEXT: movl $0, %edx 1228; X86-NEXT: cmovel %edx, %ebx 1229; X86-NEXT: cmpl $-1, %ebx 1230; X86-NEXT: movl $0, %esi 1231; X86-NEXT: cmovel %ecx, %esi 1232; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1233; X86-NEXT: testl %eax, %eax 1234; X86-NEXT: cmovsl %edx, %ecx 1235; X86-NEXT: movl $-1, %edx 1236; X86-NEXT: cmovsl %edx, %ebx 1237; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1238; X86-NEXT: cmpl $-1, %eax 1239; X86-NEXT: cmovel %esi, %ecx 1240; X86-NEXT: cmovnel %ebx, %eax 1241; X86-NEXT: shldl $31, %ecx, %eax 1242; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1243; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1244; X86-NEXT: andl %eax, %edi 1245; X86-NEXT: negl %eax 1246; X86-NEXT: movl $0, %eax 1247; X86-NEXT: sbbl %eax, %eax 1248; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1249; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1250; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1251; X86-NEXT: cmovnel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1252; X86-NEXT: movl $0, %esi 1253; X86-NEXT: cmovel %esi, %edi 1254; X86-NEXT: cmpl $-1, %edi 1255; X86-NEXT: movl $0, %edx 1256; X86-NEXT: cmovel %eax, %edx 1257; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1258; X86-NEXT: testl %ecx, %ecx 1259; X86-NEXT: cmovsl %esi, %eax 1260; X86-NEXT: movl $0, %esi 1261; X86-NEXT: movl $-1, %ebx 1262; X86-NEXT: cmovsl %ebx, %edi 1263; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1264; X86-NEXT: cmpl $-1, %ecx 1265; X86-NEXT: cmovel %edx, %eax 1266; X86-NEXT: cmovnel %edi, %ecx 1267; X86-NEXT: shldl $31, %eax, %ecx 1268; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill 1269; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1270; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 1271; X86-NEXT: andl %eax, %edx 1272; X86-NEXT: negl %eax 1273; X86-NEXT: movl $0, %eax 1274; X86-NEXT: sbbl %eax, %eax 1275; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1276; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1277; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1278; X86-NEXT: cmovnel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1279; X86-NEXT: cmovel %esi, %edx 1280; X86-NEXT: cmpl $-1, %edx 1281; X86-NEXT: movl $0, %ecx 1282; X86-NEXT: cmovel %eax, %ecx 1283; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload 1284; X86-NEXT: testl %ebx, %ebx 1285; X86-NEXT: cmovsl %esi, %eax 1286; X86-NEXT: movl $-1, %edi 1287; X86-NEXT: cmovsl %edi, %edx 1288; X86-NEXT: andl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload 1289; X86-NEXT: cmpl $-1, %ebx 1290; X86-NEXT: cmovel %ecx, %eax 1291; X86-NEXT: cmovnel %edx, %ebx 1292; X86-NEXT: shldl $31, %eax, %ebx 1293; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload 1294; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload 1295; X86-NEXT: andl %eax, %edi 1296; X86-NEXT: negl %eax 1297; X86-NEXT: movl $0, %eax 1298; X86-NEXT: sbbl %eax, %eax 1299; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1300; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1301; X86-NEXT: orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload 1302; X86-NEXT: cmovnel {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload 1303; X86-NEXT: cmovel %esi, %edi 1304; X86-NEXT: cmpl $-1, %edi 1305; X86-NEXT: movl $0, %ecx 1306; X86-NEXT: cmovel %eax, %ecx 1307; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload 1308; X86-NEXT: testl %edx, %edx 1309; X86-NEXT: cmovsl %esi, %eax 1310; X86-NEXT: movl $-1, %esi 1311; X86-NEXT: cmovsl %esi, %edi 1312; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload 1313; X86-NEXT: andl %edx, %esi 1314; X86-NEXT: cmpl $-1, %esi 1315; X86-NEXT: cmovel %ecx, %eax 1316; X86-NEXT: cmovnel %edi, %esi 1317; X86-NEXT: shldl $31, %eax, %esi 1318; X86-NEXT: movl 8(%ebp), %eax 1319; X86-NEXT: movl %esi, 12(%eax) 1320; X86-NEXT: movl %ebx, 8(%eax) 1321; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1322; X86-NEXT: movl %ecx, 4(%eax) 1323; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload 1324; X86-NEXT: movl %ecx, (%eax) 1325; X86-NEXT: leal -12(%ebp), %esp 1326; X86-NEXT: popl %esi 1327; X86-NEXT: popl %edi 1328; X86-NEXT: popl %ebx 1329; X86-NEXT: popl %ebp 1330; X86-NEXT: retl $4 1331 %tmp = call <4 x i32> @llvm.sdiv.fix.sat.v4i32(<4 x i32> %x, <4 x i32> %y, i32 31) 1332 ret <4 x i32> %tmp 1333} 1334