238 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s3 4define i1 @t32_3_1(i32 %X) nounwind {5; CHECK-LABEL: t32_3_1:6; CHECK: // %bb.0:7; CHECK-NEXT: mov w8, #43691 // =0xaaab8; CHECK-NEXT: mov w9, #1431655765 // =0x555555559; CHECK-NEXT: movk w8, #43690, lsl #1610; CHECK-NEXT: madd w8, w0, w8, w911; CHECK-NEXT: cmp w8, w912; CHECK-NEXT: cset w0, lo13; CHECK-NEXT: ret14 %urem = urem i32 %X, 315 %cmp = icmp eq i32 %urem, 116 ret i1 %cmp17}18 19define i1 @t32_3_2(i32 %X) nounwind {20; CHECK-LABEL: t32_3_2:21; CHECK: // %bb.0:22; CHECK-NEXT: mov w8, #43691 // =0xaaab23; CHECK-NEXT: mov w9, #-1431655766 // =0xaaaaaaaa24; CHECK-NEXT: movk w8, #43690, lsl #1625; CHECK-NEXT: madd w8, w0, w8, w926; CHECK-NEXT: mov w9, #1431655765 // =0x5555555527; CHECK-NEXT: cmp w8, w928; CHECK-NEXT: cset w0, lo29; CHECK-NEXT: ret30 %urem = urem i32 %X, 331 %cmp = icmp eq i32 %urem, 232 ret i1 %cmp33}34 35 36define i1 @t32_5_1(i32 %X) nounwind {37; CHECK-LABEL: t32_5_1:38; CHECK: // %bb.0:39; CHECK-NEXT: mov w8, #52429 // =0xcccd40; CHECK-NEXT: mov w9, #858993459 // =0x3333333341; CHECK-NEXT: movk w8, #52428, lsl #1642; CHECK-NEXT: madd w8, w0, w8, w943; CHECK-NEXT: cmp w8, w944; CHECK-NEXT: cset w0, lo45; CHECK-NEXT: ret46 %urem = urem i32 %X, 547 %cmp = icmp eq i32 %urem, 148 ret i1 %cmp49}50 51define i1 @t32_5_2(i32 %X) nounwind {52; CHECK-LABEL: t32_5_2:53; CHECK: // %bb.0:54; CHECK-NEXT: mov w8, #52429 // =0xcccd55; CHECK-NEXT: mov w9, #1717986918 // =0x6666666656; CHECK-NEXT: movk w8, #52428, lsl #1657; CHECK-NEXT: madd w8, w0, w8, w958; CHECK-NEXT: mov w9, #858993459 // =0x3333333359; CHECK-NEXT: cmp w8, w960; CHECK-NEXT: cset w0, lo61; CHECK-NEXT: ret62 %urem = urem i32 %X, 563 %cmp = icmp eq i32 %urem, 264 ret i1 %cmp65}66 67define i1 @t32_5_3(i32 %X) nounwind {68; CHECK-LABEL: t32_5_3:69; CHECK: // %bb.0:70; CHECK-NEXT: mov w8, #52429 // =0xcccd71; CHECK-NEXT: mov w9, #-1717986919 // =0x9999999972; CHECK-NEXT: movk w8, #52428, lsl #1673; CHECK-NEXT: madd w8, w0, w8, w974; CHECK-NEXT: mov w9, #858993459 // =0x3333333375; CHECK-NEXT: cmp w8, w976; CHECK-NEXT: cset w0, lo77; CHECK-NEXT: ret78 %urem = urem i32 %X, 579 %cmp = icmp eq i32 %urem, 380 ret i1 %cmp81}82 83define i1 @t32_5_4(i32 %X) nounwind {84; CHECK-LABEL: t32_5_4:85; CHECK: // %bb.0:86; CHECK-NEXT: mov w8, #52429 // =0xcccd87; CHECK-NEXT: mov w9, #-858993460 // =0xcccccccc88; CHECK-NEXT: movk w8, #52428, lsl #1689; CHECK-NEXT: madd w8, w0, w8, w990; CHECK-NEXT: mov w9, #858993459 // =0x3333333391; CHECK-NEXT: cmp w8, w992; CHECK-NEXT: cset w0, lo93; CHECK-NEXT: ret94 %urem = urem i32 %X, 595 %cmp = icmp eq i32 %urem, 496 ret i1 %cmp97}98 99 100define i1 @t32_6_1(i32 %X) nounwind {101; CHECK-LABEL: t32_6_1:102; CHECK: // %bb.0:103; CHECK-NEXT: mov w8, #43691 // =0xaaab104; CHECK-NEXT: mov w9, #1431655765 // =0x55555555105; CHECK-NEXT: movk w8, #43690, lsl #16106; CHECK-NEXT: madd w8, w0, w8, w9107; CHECK-NEXT: mov w9, #43691 // =0xaaab108; CHECK-NEXT: movk w9, #10922, lsl #16109; CHECK-NEXT: ror w8, w8, #1110; CHECK-NEXT: cmp w8, w9111; CHECK-NEXT: cset w0, lo112; CHECK-NEXT: ret113 %urem = urem i32 %X, 6114 %cmp = icmp eq i32 %urem, 1115 ret i1 %cmp116}117 118define i1 @t32_6_2(i32 %X) nounwind {119; CHECK-LABEL: t32_6_2:120; CHECK: // %bb.0:121; CHECK-NEXT: mov w8, #43691 // =0xaaab122; CHECK-NEXT: mov w9, #-1431655766 // =0xaaaaaaaa123; CHECK-NEXT: movk w8, #43690, lsl #16124; CHECK-NEXT: madd w8, w0, w8, w9125; CHECK-NEXT: mov w9, #43691 // =0xaaab126; CHECK-NEXT: movk w9, #10922, lsl #16127; CHECK-NEXT: ror w8, w8, #1128; CHECK-NEXT: cmp w8, w9129; CHECK-NEXT: cset w0, lo130; CHECK-NEXT: ret131 %urem = urem i32 %X, 6132 %cmp = icmp eq i32 %urem, 2133 ret i1 %cmp134}135 136define i1 @t32_6_3(i32 %X) nounwind {137; CHECK-LABEL: t32_6_3:138; CHECK: // %bb.0:139; CHECK-NEXT: mov w8, #43691 // =0xaaab140; CHECK-NEXT: mov w9, #-1 // =0xffffffff141; CHECK-NEXT: movk w8, #43690, lsl #16142; CHECK-NEXT: madd w8, w0, w8, w9143; CHECK-NEXT: mov w9, #43691 // =0xaaab144; CHECK-NEXT: movk w9, #10922, lsl #16145; CHECK-NEXT: ror w8, w8, #1146; CHECK-NEXT: cmp w8, w9147; CHECK-NEXT: cset w0, lo148; CHECK-NEXT: ret149 %urem = urem i32 %X, 6150 %cmp = icmp eq i32 %urem, 3151 ret i1 %cmp152}153 154define i1 @t32_6_4(i32 %X) nounwind {155; CHECK-LABEL: t32_6_4:156; CHECK: // %bb.0:157; CHECK-NEXT: mov w8, #43691 // =0xaaab158; CHECK-NEXT: sub w9, w0, #4159; CHECK-NEXT: movk w8, #43690, lsl #16160; CHECK-NEXT: mul w8, w9, w8161; CHECK-NEXT: mov w9, #43690 // =0xaaaa162; CHECK-NEXT: movk w9, #10922, lsl #16163; CHECK-NEXT: ror w8, w8, #1164; CHECK-NEXT: cmp w8, w9165; CHECK-NEXT: cset w0, lo166; CHECK-NEXT: ret167 %urem = urem i32 %X, 6168 %cmp = icmp eq i32 %urem, 4169 ret i1 %cmp170}171 172define i1 @t32_6_5(i32 %X) nounwind {173; CHECK-LABEL: t32_6_5:174; CHECK: // %bb.0:175; CHECK-NEXT: mov w8, #43691 // =0xaaab176; CHECK-NEXT: sub w9, w0, #5177; CHECK-NEXT: movk w8, #43690, lsl #16178; CHECK-NEXT: mul w8, w9, w8179; CHECK-NEXT: mov w9, #43690 // =0xaaaa180; CHECK-NEXT: movk w9, #10922, lsl #16181; CHECK-NEXT: ror w8, w8, #1182; CHECK-NEXT: cmp w8, w9183; CHECK-NEXT: cset w0, lo184; CHECK-NEXT: ret185 %urem = urem i32 %X, 6186 %cmp = icmp eq i32 %urem, 5187 ret i1 %cmp188}189 190;-------------------------------------------------------------------------------191; Other widths.192 193define i1 @t16_3_2(i16 %X) nounwind {194; CHECK-LABEL: t16_3_2:195; CHECK: // %bb.0:196; CHECK-NEXT: mov w8, #-21845 // =0xffffaaab197; CHECK-NEXT: mov w9, #-21846 // =0xffffaaaa198; CHECK-NEXT: madd w8, w0, w8, w9199; CHECK-NEXT: mov w9, #21845 // =0x5555200; CHECK-NEXT: cmp w9, w8, uxth201; CHECK-NEXT: cset w0, hi202; CHECK-NEXT: ret203 %urem = urem i16 %X, 3204 %cmp = icmp eq i16 %urem, 2205 ret i1 %cmp206}207 208define i1 @t8_3_2(i8 %X) nounwind {209; CHECK-LABEL: t8_3_2:210; CHECK: // %bb.0:211; CHECK-NEXT: mov w8, #-85 // =0xffffffab212; CHECK-NEXT: mov w9, #-86 // =0xffffffaa213; CHECK-NEXT: madd w8, w0, w8, w9214; CHECK-NEXT: and w8, w8, #0xff215; CHECK-NEXT: cmp w8, #85216; CHECK-NEXT: cset w0, lo217; CHECK-NEXT: ret218 %urem = urem i8 %X, 3219 %cmp = icmp eq i8 %urem, 2220 ret i1 %cmp221}222 223define i1 @t64_3_2(i64 %X) nounwind {224; CHECK-LABEL: t64_3_2:225; CHECK: // %bb.0:226; CHECK-NEXT: mov x8, #-6148914691236517206 // =0xaaaaaaaaaaaaaaaa227; CHECK-NEXT: mov x9, #-6148914691236517206 // =0xaaaaaaaaaaaaaaaa228; CHECK-NEXT: movk x8, #43691229; CHECK-NEXT: madd x8, x0, x8, x9230; CHECK-NEXT: mov x9, #6148914691236517205 // =0x5555555555555555231; CHECK-NEXT: cmp x8, x9232; CHECK-NEXT: cset w0, lo233; CHECK-NEXT: ret234 %urem = urem i64 %X, 3235 %cmp = icmp eq i64 %urem, 2236 ret i1 %cmp237}238