327 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=i686-unknown-linux-gnu < %s | FileCheck %s --check-prefix=X863; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=X644 5define i1 @t32_3_1(i32 %X) nounwind {6; X86-LABEL: t32_3_1:7; X86: # %bb.0:8; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB9; X86-NEXT: addl $1431655765, %eax # imm = 0x5555555510; X86-NEXT: cmpl $1431655765, %eax # imm = 0x5555555511; X86-NEXT: setb %al12; X86-NEXT: retl13;14; X64-LABEL: t32_3_1:15; X64: # %bb.0:16; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB17; X64-NEXT: addl $1431655765, %eax # imm = 0x5555555518; X64-NEXT: cmpl $1431655765, %eax # imm = 0x5555555519; X64-NEXT: setb %al20; X64-NEXT: retq21 %urem = urem i32 %X, 322 %cmp = icmp eq i32 %urem, 123 ret i1 %cmp24}25 26define i1 @t32_3_2(i32 %X) nounwind {27; X86-LABEL: t32_3_2:28; X86: # %bb.0:29; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB30; X86-NEXT: addl $-1431655766, %eax # imm = 0xAAAAAAAA31; X86-NEXT: cmpl $1431655765, %eax # imm = 0x5555555532; X86-NEXT: setb %al33; X86-NEXT: retl34;35; X64-LABEL: t32_3_2:36; X64: # %bb.0:37; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB38; X64-NEXT: addl $-1431655766, %eax # imm = 0xAAAAAAAA39; X64-NEXT: cmpl $1431655765, %eax # imm = 0x5555555540; X64-NEXT: setb %al41; X64-NEXT: retq42 %urem = urem i32 %X, 343 %cmp = icmp eq i32 %urem, 244 ret i1 %cmp45}46 47 48define i1 @t32_5_1(i32 %X) nounwind {49; X86-LABEL: t32_5_1:50; X86: # %bb.0:51; X86-NEXT: imull $-858993459, {{[0-9]+}}(%esp), %eax # imm = 0xCCCCCCCD52; X86-NEXT: addl $858993459, %eax # imm = 0x3333333353; X86-NEXT: cmpl $858993459, %eax # imm = 0x3333333354; X86-NEXT: setb %al55; X86-NEXT: retl56;57; X64-LABEL: t32_5_1:58; X64: # %bb.0:59; X64-NEXT: imull $-858993459, %edi, %eax # imm = 0xCCCCCCCD60; X64-NEXT: addl $858993459, %eax # imm = 0x3333333361; X64-NEXT: cmpl $858993459, %eax # imm = 0x3333333362; X64-NEXT: setb %al63; X64-NEXT: retq64 %urem = urem i32 %X, 565 %cmp = icmp eq i32 %urem, 166 ret i1 %cmp67}68 69define i1 @t32_5_2(i32 %X) nounwind {70; X86-LABEL: t32_5_2:71; X86: # %bb.0:72; X86-NEXT: imull $-858993459, {{[0-9]+}}(%esp), %eax # imm = 0xCCCCCCCD73; X86-NEXT: addl $1717986918, %eax # imm = 0x6666666674; X86-NEXT: cmpl $858993459, %eax # imm = 0x3333333375; X86-NEXT: setb %al76; X86-NEXT: retl77;78; X64-LABEL: t32_5_2:79; X64: # %bb.0:80; X64-NEXT: imull $-858993459, %edi, %eax # imm = 0xCCCCCCCD81; X64-NEXT: addl $1717986918, %eax # imm = 0x6666666682; X64-NEXT: cmpl $858993459, %eax # imm = 0x3333333383; X64-NEXT: setb %al84; X64-NEXT: retq85 %urem = urem i32 %X, 586 %cmp = icmp eq i32 %urem, 287 ret i1 %cmp88}89 90define i1 @t32_5_3(i32 %X) nounwind {91; X86-LABEL: t32_5_3:92; X86: # %bb.0:93; X86-NEXT: imull $-858993459, {{[0-9]+}}(%esp), %eax # imm = 0xCCCCCCCD94; X86-NEXT: addl $-1717986919, %eax # imm = 0x9999999995; X86-NEXT: cmpl $858993459, %eax # imm = 0x3333333396; X86-NEXT: setb %al97; X86-NEXT: retl98;99; X64-LABEL: t32_5_3:100; X64: # %bb.0:101; X64-NEXT: imull $-858993459, %edi, %eax # imm = 0xCCCCCCCD102; X64-NEXT: addl $-1717986919, %eax # imm = 0x99999999103; X64-NEXT: cmpl $858993459, %eax # imm = 0x33333333104; X64-NEXT: setb %al105; X64-NEXT: retq106 %urem = urem i32 %X, 5107 %cmp = icmp eq i32 %urem, 3108 ret i1 %cmp109}110 111define i1 @t32_5_4(i32 %X) nounwind {112; X86-LABEL: t32_5_4:113; X86: # %bb.0:114; X86-NEXT: imull $-858993459, {{[0-9]+}}(%esp), %eax # imm = 0xCCCCCCCD115; X86-NEXT: addl $-858993460, %eax # imm = 0xCCCCCCCC116; X86-NEXT: cmpl $858993459, %eax # imm = 0x33333333117; X86-NEXT: setb %al118; X86-NEXT: retl119;120; X64-LABEL: t32_5_4:121; X64: # %bb.0:122; X64-NEXT: imull $-858993459, %edi, %eax # imm = 0xCCCCCCCD123; X64-NEXT: addl $-858993460, %eax # imm = 0xCCCCCCCC124; X64-NEXT: cmpl $858993459, %eax # imm = 0x33333333125; X64-NEXT: setb %al126; X64-NEXT: retq127 %urem = urem i32 %X, 5128 %cmp = icmp eq i32 %urem, 4129 ret i1 %cmp130}131 132 133define i1 @t32_6_1(i32 %X) nounwind {134; X86-LABEL: t32_6_1:135; X86: # %bb.0:136; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB137; X86-NEXT: addl $1431655765, %eax # imm = 0x55555555138; X86-NEXT: rorl %eax139; X86-NEXT: cmpl $715827883, %eax # imm = 0x2AAAAAAB140; X86-NEXT: setb %al141; X86-NEXT: retl142;143; X64-LABEL: t32_6_1:144; X64: # %bb.0:145; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB146; X64-NEXT: addl $1431655765, %eax # imm = 0x55555555147; X64-NEXT: rorl %eax148; X64-NEXT: cmpl $715827883, %eax # imm = 0x2AAAAAAB149; X64-NEXT: setb %al150; X64-NEXT: retq151 %urem = urem i32 %X, 6152 %cmp = icmp eq i32 %urem, 1153 ret i1 %cmp154}155 156define i1 @t32_6_2(i32 %X) nounwind {157; X86-LABEL: t32_6_2:158; X86: # %bb.0:159; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB160; X86-NEXT: addl $-1431655766, %eax # imm = 0xAAAAAAAA161; X86-NEXT: rorl %eax162; X86-NEXT: cmpl $715827883, %eax # imm = 0x2AAAAAAB163; X86-NEXT: setb %al164; X86-NEXT: retl165;166; X64-LABEL: t32_6_2:167; X64: # %bb.0:168; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB169; X64-NEXT: addl $-1431655766, %eax # imm = 0xAAAAAAAA170; X64-NEXT: rorl %eax171; X64-NEXT: cmpl $715827883, %eax # imm = 0x2AAAAAAB172; X64-NEXT: setb %al173; X64-NEXT: retq174 %urem = urem i32 %X, 6175 %cmp = icmp eq i32 %urem, 2176 ret i1 %cmp177}178 179define i1 @t32_6_3(i32 %X) nounwind {180; X86-LABEL: t32_6_3:181; X86: # %bb.0:182; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB183; X86-NEXT: decl %eax184; X86-NEXT: rorl %eax185; X86-NEXT: cmpl $715827883, %eax # imm = 0x2AAAAAAB186; X86-NEXT: setb %al187; X86-NEXT: retl188;189; X64-LABEL: t32_6_3:190; X64: # %bb.0:191; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB192; X64-NEXT: decl %eax193; X64-NEXT: rorl %eax194; X64-NEXT: cmpl $715827883, %eax # imm = 0x2AAAAAAB195; X64-NEXT: setb %al196; X64-NEXT: retq197 %urem = urem i32 %X, 6198 %cmp = icmp eq i32 %urem, 3199 ret i1 %cmp200}201 202define i1 @t32_6_4(i32 %X) nounwind {203; X86-LABEL: t32_6_4:204; X86: # %bb.0:205; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB206; X86-NEXT: addl $1431655764, %eax # imm = 0x55555554207; X86-NEXT: rorl %eax208; X86-NEXT: cmpl $715827882, %eax # imm = 0x2AAAAAAA209; X86-NEXT: setb %al210; X86-NEXT: retl211;212; X64-LABEL: t32_6_4:213; X64: # %bb.0:214; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB215; X64-NEXT: addl $1431655764, %eax # imm = 0x55555554216; X64-NEXT: rorl %eax217; X64-NEXT: cmpl $715827882, %eax # imm = 0x2AAAAAAA218; X64-NEXT: setb %al219; X64-NEXT: retq220 %urem = urem i32 %X, 6221 %cmp = icmp eq i32 %urem, 4222 ret i1 %cmp223}224 225define i1 @t32_6_5(i32 %X) nounwind {226; X86-LABEL: t32_6_5:227; X86: # %bb.0:228; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %eax # imm = 0xAAAAAAAB229; X86-NEXT: addl $-1431655767, %eax # imm = 0xAAAAAAA9230; X86-NEXT: rorl %eax231; X86-NEXT: cmpl $715827882, %eax # imm = 0x2AAAAAAA232; X86-NEXT: setb %al233; X86-NEXT: retl234;235; X64-LABEL: t32_6_5:236; X64: # %bb.0:237; X64-NEXT: imull $-1431655765, %edi, %eax # imm = 0xAAAAAAAB238; X64-NEXT: addl $-1431655767, %eax # imm = 0xAAAAAAA9239; X64-NEXT: rorl %eax240; X64-NEXT: cmpl $715827882, %eax # imm = 0x2AAAAAAA241; X64-NEXT: setb %al242; X64-NEXT: retq243 %urem = urem i32 %X, 6244 %cmp = icmp eq i32 %urem, 5245 ret i1 %cmp246}247 248;-------------------------------------------------------------------------------249; Other widths.250 251define i1 @t16_3_2(i16 %X) nounwind {252; X86-LABEL: t16_3_2:253; X86: # %bb.0:254; X86-NEXT: imull $-21845, {{[0-9]+}}(%esp), %eax # imm = 0xAAAB255; X86-NEXT: addl $-21846, %eax # imm = 0xAAAA256; X86-NEXT: movzwl %ax, %eax257; X86-NEXT: cmpl $21845, %eax # imm = 0x5555258; X86-NEXT: setb %al259; X86-NEXT: retl260;261; X64-LABEL: t16_3_2:262; X64: # %bb.0:263; X64-NEXT: imull $-21845, %edi, %eax # imm = 0xAAAB264; X64-NEXT: addl $-21846, %eax # imm = 0xAAAA265; X64-NEXT: movzwl %ax, %eax266; X64-NEXT: cmpl $21845, %eax # imm = 0x5555267; X64-NEXT: setb %al268; X64-NEXT: retq269 %urem = urem i16 %X, 3270 %cmp = icmp eq i16 %urem, 2271 ret i1 %cmp272}273 274define i1 @t8_3_2(i8 %X) nounwind {275; X86-LABEL: t8_3_2:276; X86: # %bb.0:277; X86-NEXT: imull $-85, {{[0-9]+}}(%esp), %eax278; X86-NEXT: addb $-86, %al279; X86-NEXT: cmpb $85, %al280; X86-NEXT: setb %al281; X86-NEXT: retl282;283; X64-LABEL: t8_3_2:284; X64: # %bb.0:285; X64-NEXT: imull $-85, %edi, %eax286; X64-NEXT: addb $-86, %al287; X64-NEXT: cmpb $85, %al288; X64-NEXT: setb %al289; X64-NEXT: retq290 %urem = urem i8 %X, 3291 %cmp = icmp eq i8 %urem, 2292 ret i1 %cmp293}294 295define i1 @t64_3_2(i64 %X) nounwind {296; X86-LABEL: t64_3_2:297; X86: # %bb.0:298; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx299; X86-NEXT: movl $-1431655765, %edx # imm = 0xAAAAAAAB300; X86-NEXT: movl %ecx, %eax301; X86-NEXT: mull %edx302; X86-NEXT: imull $-1431655766, %ecx, %ecx # imm = 0xAAAAAAAA303; X86-NEXT: addl %edx, %ecx304; X86-NEXT: imull $-1431655765, {{[0-9]+}}(%esp), %edx # imm = 0xAAAAAAAB305; X86-NEXT: addl %ecx, %edx306; X86-NEXT: addl $-1431655766, %eax # imm = 0xAAAAAAAA307; X86-NEXT: adcl $-1431655766, %edx # imm = 0xAAAAAAAA308; X86-NEXT: cmpl $1431655765, %eax # imm = 0x55555555309; X86-NEXT: sbbl $1431655765, %edx # imm = 0x55555555310; X86-NEXT: setb %al311; X86-NEXT: retl312;313; X64-LABEL: t64_3_2:314; X64: # %bb.0:315; X64-NEXT: movabsq $-6148914691236517205, %rax # imm = 0xAAAAAAAAAAAAAAAB316; X64-NEXT: imulq %rdi, %rax317; X64-NEXT: movabsq $-6148914691236517206, %rcx # imm = 0xAAAAAAAAAAAAAAAA318; X64-NEXT: addq %rax, %rcx319; X64-NEXT: movabsq $6148914691236517205, %rax # imm = 0x5555555555555555320; X64-NEXT: cmpq %rax, %rcx321; X64-NEXT: setb %al322; X64-NEXT: retq323 %urem = urem i64 %X, 3324 %cmp = icmp eq i64 %urem, 2325 ret i1 %cmp326}327