brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 21a7b21 Raw
280 lines · plain
1; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 -verify-machineinstrs | FileCheck %s2; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr9 -verify-machineinstrs | FileCheck %s3; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 | FileCheck %s -check-prefix=CHECK-PWR8 -implicit-check-not mod[us][wd]4; RUN: opt < %s -passes=div-rem-pairs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 | \5; RUN:   llc -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-DRP6; RUN: opt < %s -passes=div-rem-pairs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr9 | \7; RUN:   llc -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-DRP8; RUN: opt < %s -passes=div-rem-pairs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 | \9; RUN:   llc -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-PWR8 -implicit-check-not mod[us][wd]10 11@mod_resultsw = local_unnamed_addr global i32 0, align 412@mod_resultud = local_unnamed_addr global i64 0, align 813@div_resultsw = local_unnamed_addr global i32 0, align 414@mod_resultuw = local_unnamed_addr global i32 0, align 415@div_resultuw = local_unnamed_addr global i32 0, align 416@div_resultsd = local_unnamed_addr global i64 0, align 817@mod_resultsd = local_unnamed_addr global i64 0, align 818@div_resultud = local_unnamed_addr global i64 0, align 819 20; Function Attrs: norecurse nounwind21define void @modulo_sw(i32 signext %a, i32 signext %b) local_unnamed_addr {22entry:23  %rem = srem i32 %a, %b24  store i32 %rem, ptr @mod_resultsw, align 425  ret void26; CHECK-LABEL: modulo_sw27; CHECK: modsw {{[0-9]+}}, 3, 428; CHECK: blr29; CHECK-PWR8-LABEL: modulo_sw30; CHECK-PWR8: div31; CHECK-PWR8: mull32; CHECK-PWR8: sub33; CHECK-PWR8: blr34}35 36; Function Attrs: norecurse nounwind readnone37define zeroext i32 @modulo_uw(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr {38entry:39  %rem = urem i32 %a, %b40  ret i32 %rem41; CHECK-LABEL: modulo_uw42; CHECK: moduw {{[0-9]+}}, 3, 443; CHECK: blr44; CHECK-PWR8-LABEL: modulo_uw45; CHECK-PWR8: div46; CHECK-PWR8: mull47; CHECK-PWR8: sub48; CHECK-PWR8: blr49}50 51; Function Attrs: norecurse nounwind readnone52define i64 @modulo_sd(i64 %a, i64 %b) local_unnamed_addr {53entry:54  %rem = srem i64 %a, %b55  ret i64 %rem56; CHECK-LABEL: modulo_sd57; CHECK: modsd {{[0-9]+}}, 3, 458; CHECK: blr59; CHECK-PWR8-LABEL: modulo_sd60; CHECK-PWR8: div61; CHECK-PWR8: mull62; CHECK-PWR8: sub63; CHECK-PWR8: blr64}65 66; Function Attrs: norecurse nounwind67define void @modulo_ud(i64 %a, i64 %b) local_unnamed_addr {68entry:69  %rem = urem i64 %a, %b70  store i64 %rem, ptr @mod_resultud, align 871  ret void72; CHECK-LABEL: modulo_ud73; CHECK: modud {{[0-9]+}}, 3, 474; CHECK: blr75; CHECK-PWR8-LABEL: modulo_ud76; CHECK-PWR8: div77; CHECK-PWR8: mull78; CHECK-PWR8: sub79; CHECK-PWR8: blr80}81 82; Function Attrs: norecurse nounwind83define void @modulo_div_sw(i32 signext %a, i32 signext %b) local_unnamed_addr {84entry:85  %rem = srem i32 %a, %b86  store i32 %rem, ptr @mod_resultsw, align 487  %div = sdiv i32 %a, %b88  store i32 %div, ptr @div_resultsw, align 489  ret void90; CHECK-LABEL: modulo_div_sw91; CHECK: modsw {{[0-9]+}}, 3, 492; CHECK: blr93; CHECK-DRP-LABEL: modulo_div_sw94; CHECK-DRP-NOT: modsw95; CHECK-DRP: div96; CHECK-DRP-NOT: modsw97; CHECK-DRP: mull98; CHECK-DRP-NOT: modsw99; CHECK-DRP: sub100; CHECK-DRP: blr101; CHECK-PWR8-LABEL: modulo_div_sw102; CHECK-PWR8: div103; CHECK-PWR8: mull104; CHECK-PWR8: sub105; CHECK-PWR8: blr106}107 108; Function Attrs: norecurse nounwind109define void @modulo_div_abc_sw(i32 signext %a, i32 signext %b, i32 signext %c) local_unnamed_addr {110entry:111  %rem = srem i32 %a, %c112  store i32 %rem, ptr @mod_resultsw, align 4113  %div = sdiv i32 %b, %c114  store i32 %div, ptr @div_resultsw, align 4115  ret void116; CHECK-LABEL: modulo_div_abc_sw117; CHECK: modsw {{[0-9]+}}, 3, 5118; CHECK: blr119; CHECK-PWR8-LABEL: modulo_div_abc_sw120; CHECK-PWR8: div121; CHECK-PWR8: mull122; CHECK-PWR8: sub123; CHECK-PWR8: blr124}125 126; Function Attrs: norecurse nounwind127define void @modulo_div_uw(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr {128entry:129  %rem = urem i32 %a, %b130  store i32 %rem, ptr @mod_resultuw, align 4131  %div = udiv i32 %a, %b132  store i32 %div, ptr @div_resultuw, align 4133  ret void134; CHECK-LABEL: modulo_div_uw135; CHECK: moduw {{[0-9]+}}, 3, 4136; CHECK: blr137; CHECK-DRP-LABEL: modulo_div_uw138; CHECK-DRP-NOT: moduw139; CHECK-DRP: div140; CHECK-DRP-NOT: moduw141; CHECK-DRP: mull142; CHECK-DRP-NOT: moduw143; CHECK-DRP: sub144; CHECK-DRP: blr145; CHECK-PWR8-LABEL: modulo_div_uw146; CHECK-PWR8: div147; CHECK-PWR8: mull148; CHECK-PWR8: sub149; CHECK-PWR8: blr150}151 152; Function Attrs: norecurse nounwind153define void @modulo_div_swuw(i32 signext %a, i32 signext %b) local_unnamed_addr {154entry:155  %rem = srem i32 %a, %b156  store i32 %rem, ptr @mod_resultsw, align 4157  %div = udiv i32 %a, %b158  store i32 %div, ptr @div_resultsw, align 4159  ret void160; CHECK-LABEL: modulo_div_swuw161; CHECK: modsw {{[0-9]+}}, 3, 4162; CHECK: blr163; CHECK-PWR8-LABEL: modulo_div_swuw164; CHECK-PWR8: div165; CHECK-PWR8: mull166; CHECK-PWR8: sub167; CHECK-PWR8: blr168}169 170; Function Attrs: norecurse nounwind171define void @modulo_div_udsd(i64 %a, i64 %b) local_unnamed_addr {172entry:173  %rem = urem i64 %a, %b174  store i64 %rem, ptr @mod_resultud, align 8175  %div = sdiv i64 %a, %b176  store i64 %div, ptr @div_resultsd, align 8177  ret void178; CHECK-LABEL: modulo_div_udsd179; CHECK: modud {{[0-9]+}}, 3, 4180; CHECK: blr181; CHECK-PWR8-LABEL: modulo_div_udsd182; CHECK-PWR8: div183; CHECK-PWR8: mull184; CHECK-PWR8: sub185; CHECK-PWR8: blr186}187 188; Function Attrs: norecurse nounwind189define void @modulo_const32_sw(i32 signext %a) local_unnamed_addr {190entry:191  %rem = srem i32 %a, 32192  store i32 %rem, ptr @mod_resultsw, align 4193  ret void194; CHECK-LABEL: modulo_const32_sw195; CHECK-NOT: modsw196; CHECK: srawi197; CHECK-NOT: modsw198; CHECK: addze199; CHECK-NOT: modsw200; CHECK: slwi201; CHECK-NOT: modsw202; CHECK: sub203; CHECK-NOT: modsw204; CHECK: blr205; CHECK-PWR8-LABEL: modulo_const32_sw206; CHECK-PWR8: srawi207; CHECK-PWR8: addze208; CHECK-PWR8: slwi209; CHECK-PWR8: sub210; CHECK-PWR8: blr211}212 213; Function Attrs: norecurse nounwind readnone214define signext i32 @modulo_const3_sw(i32 signext %a) local_unnamed_addr {215entry:216  %rem = srem i32 %a, 3217  ret i32 %rem218; CHECK-LABEL: modulo_const3_sw219; CHECK-NOT: modsw220; CHECK: mulh221; CHECK-NOT: modsw222; CHECK: sub223; CHECK-NOT: modsw224; CHECK: blr225; CHECK-PWR8-LABEL: modulo_const3_sw226; CHECK-PWR8: mulh227; CHECK-PWR8: sub228; CHECK-PWR8: blr229}230 231; Function Attrs: norecurse nounwind readnone232define signext i32 @const2_modulo_sw(i32 signext %a) local_unnamed_addr {233entry:234  %rem = srem i32 2, %a235  ret i32 %rem236; CHECK-LABEL: const2_modulo_sw237; CHECK: modsw {{[0-9]+}}, {{[0-9]+}}, 3238; CHECK: blr239; CHECK-PWR8-LABEL: const2_modulo_sw240; CHECK-PWR8: div241; CHECK-PWR8: mull242; CHECK-PWR8: sub243; CHECK-PWR8: blr244}245 246; Function Attrs: norecurse nounwind247define void @blocks_modulo_div_sw(i32 signext %a, i32 signext %b, i32 signext %c) local_unnamed_addr {248entry:249  %div = sdiv i32 %a, %b250  store i32 %div, ptr @div_resultsw, align 4251  %cmp = icmp sgt i32 %c, 0252  br i1 %cmp, label %if.then, label %if.end253 254if.then:                                          ; preds = %entry255  %rem = srem i32 %a, %b256  store i32 %rem, ptr @mod_resultsw, align 4257  br label %if.end258 259if.end:                                           ; preds = %if.then, %entry260  ret void261; CHECK-LABEL: blocks_modulo_div_sw262; CHECK: div263; CHECK: modsw {{[0-9]+}}, 3, 4264; CHECK: blr265; CHECK-DRP-LABEL: blocks_modulo_div_sw266; CHECK-DRP-NOT: modsw267; CHECK-DRP: div268; CHECK-DRP-NOT: modsw269; CHECK-DRP: mull270; CHECK-DRP-NOT: modsw271; CHECK-DRP: sub272; CHECK-DRP: blr273; CHECK-PWR8-LABEL: blocks_modulo_div_sw274; CHECK-PWR8: div275; CHECK-PWR8: mull276; CHECK-PWR8: sub277; CHECK-PWR8: blr278}279 280