271 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \3; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-BE \4; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl5; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \6; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-LE \7; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl8@glob = dso_local local_unnamed_addr global i64 0, align 89 10; Function Attrs: norecurse nounwind readnone11define i64 @test_lllesll(i64 %a, i64 %b) {12; CHECK-LABEL: test_lllesll:13; CHECK: # %bb.0: # %entry14; CHECK-NEXT: sradi r5, r4, 6315; CHECK-NEXT: rldicl r6, r3, 1, 6316; CHECK-NEXT: subfc r3, r3, r417; CHECK-NEXT: adde r3, r5, r618; CHECK-NEXT: blr19; CHECK-BE-LABEL: test_lllesll:20; CHECK-BE: # %bb.0: # %entry21; CHECK-BE-NEXT: rldicl r5, r3, 1, 6322; CHECK-BE-NEXT: sradi r6, r4, 6323; CHECK-BE-NEXT: subc r3, r4, r324; CHECK-BE-NEXT: adde r3, r6, r525; CHECK-BE-NEXT: blr26;27; CHECK-LE-LABEL: test_lllesll:28; CHECK-LE: # %bb.0: # %entry29; CHECK-LE-NEXT: rldicl r5, r3, 1, 6330; CHECK-LE-NEXT: sradi r6, r4, 6331; CHECK-LE-NEXT: subc r3, r4, r332; CHECK-LE-NEXT: adde r3, r6, r533; CHECK-LE-NEXT: blr34entry:35 %cmp = icmp sle i64 %a, %b36 %conv1 = zext i1 %cmp to i6437 ret i64 %conv138}39 40; Function Attrs: norecurse nounwind readnone41define i64 @test_lllesll_sext(i64 %a, i64 %b) {42; CHECK-LABEL: test_lllesll_sext:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: sradi r5, r4, 6345; CHECK-NEXT: rldicl r6, r3, 1, 6346; CHECK-NEXT: subfc r3, r3, r447; CHECK-NEXT: adde r3, r5, r648; CHECK-NEXT: neg r3, r349; CHECK-NEXT: blr50; CHECK-BE-LABEL: test_lllesll_sext:51; CHECK-BE: # %bb.0: # %entry52; CHECK-BE-NEXT: rldicl r5, r3, 1, 6353; CHECK-BE-NEXT: sradi r6, r4, 6354; CHECK-BE-NEXT: subc r3, r4, r355; CHECK-BE-NEXT: adde r3, r6, r556; CHECK-BE-NEXT: neg r3, r357; CHECK-BE-NEXT: blr58;59; CHECK-LE-LABEL: test_lllesll_sext:60; CHECK-LE: # %bb.0: # %entry61; CHECK-LE-NEXT: rldicl r5, r3, 1, 6362; CHECK-LE-NEXT: sradi r6, r4, 6363; CHECK-LE-NEXT: subc r3, r4, r364; CHECK-LE-NEXT: adde r3, r6, r565; CHECK-LE-NEXT: neg r3, r366; CHECK-LE-NEXT: blr67entry:68 %cmp = icmp sle i64 %a, %b69 %conv1 = sext i1 %cmp to i6470 ret i64 %conv171}72 73; Function Attrs: norecurse nounwind readnone74define i64 @test_lllesll_z(i64 %a) {75; CHECK-LABEL: test_lllesll_z:76; CHECK: # %bb.0: # %entry77; CHECK-NEXT: addi r4, r3, -178; CHECK-NEXT: or r3, r4, r379; CHECK-NEXT: rldicl r3, r3, 1, 6380; CHECK-NEXT: blr81; CHECK-BE-LABEL: test_lllesll_z:82; CHECK-BE: # %bb.0: # %entry83; CHECK-BE-NEXT: addi r4, r3, -184; CHECK-BE-NEXT: or r3, r4, r385; CHECK-BE-NEXT: rldicl r3, r3, 1, 6386; CHECK-BE-NEXT: blr87;88; CHECK-LE-LABEL: test_lllesll_z:89; CHECK-LE: # %bb.0: # %entry90; CHECK-LE-NEXT: addi r4, r3, -191; CHECK-LE-NEXT: or r3, r4, r392; CHECK-LE-NEXT: rldicl r3, r3, 1, 6393; CHECK-LE-NEXT: blr94entry:95 %cmp = icmp slt i64 %a, 196 %conv1 = zext i1 %cmp to i6497 ret i64 %conv198}99 100; Function Attrs: norecurse nounwind readnone101define i64 @test_lllesll_sext_z(i64 %a) {102; CHECK-LABEL: test_lllesll_sext_z:103; CHECK: # %bb.0: # %entry104; CHECK-NEXT: addi r4, r3, -1105; CHECK-NEXT: or r3, r4, r3106; CHECK-NEXT: sradi r3, r3, 63107; CHECK-NEXT: blr108; CHECK-BE-LABEL: test_lllesll_sext_z:109; CHECK-BE: # %bb.0: # %entry110; CHECK-BE-NEXT: addi r4, r3, -1111; CHECK-BE-NEXT: or r3, r4, r3112; CHECK-BE-NEXT: sradi r3, r3, 63113; CHECK-BE-NEXT: blr114;115; CHECK-LE-LABEL: test_lllesll_sext_z:116; CHECK-LE: # %bb.0: # %entry117; CHECK-LE-NEXT: addi r4, r3, -1118; CHECK-LE-NEXT: or r3, r4, r3119; CHECK-LE-NEXT: sradi r3, r3, 63120; CHECK-LE-NEXT: blr121entry:122 %cmp = icmp slt i64 %a, 1123 %conv1 = sext i1 %cmp to i64124 ret i64 %conv1125}126 127; Function Attrs: norecurse nounwind128define dso_local void @test_lllesll_store(i64 %a, i64 %b) {129; CHECK-LABEL: test_lllesll_store:130; CHECK: # %bb.0: # %entry131; CHECK-NEXT: sradi r6, r4, 63132; CHECK-NEXT: addis r5, r2, glob@toc@ha133; CHECK-NEXT: subfc r4, r3, r4134; CHECK-NEXT: rldicl r3, r3, 1, 63135; CHECK-NEXT: adde r3, r6, r3136; CHECK-NEXT: std r3, glob@toc@l(r5)137; CHECK-NEXT: blr138; CHECK-BE-LABEL: test_lllesll_store:139; CHECK-BE: # %bb.0: # %entry140; CHECK-BE-NEXT: rldicl r5, r3, 1, 63141; CHECK-BE-NEXT: sradi r6, r4, 63142; CHECK-BE-NEXT: subc r3, r4, r3143; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha144; CHECK-BE-NEXT: adde r3, r6, r5145; CHECK-BE-NEXT: std r3, glob@toc@l(r4)146; CHECK-BE-NEXT: blr147;148; CHECK-LE-LABEL: test_lllesll_store:149; CHECK-LE: # %bb.0: # %entry150; CHECK-LE-NEXT: rldicl r5, r3, 1, 63151; CHECK-LE-NEXT: sradi r6, r4, 63152; CHECK-LE-NEXT: subc r3, r4, r3153; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha154; CHECK-LE-NEXT: adde r3, r6, r5155; CHECK-LE-NEXT: std r3, glob@toc@l(r4)156; CHECK-LE-NEXT: blr157entry:158 %cmp = icmp sle i64 %a, %b159 %conv1 = zext i1 %cmp to i64160 store i64 %conv1, ptr @glob, align 8161 ret void162}163 164; Function Attrs: norecurse nounwind165define dso_local void @test_lllesll_sext_store(i64 %a, i64 %b) {166; CHECK-LABEL: test_lllesll_sext_store:167; CHECK: # %bb.0: # %entry168; CHECK-NEXT: sradi r6, r4, 63169; CHECK-NEXT: addis r5, r2, glob@toc@ha170; CHECK-NEXT: subfc r4, r3, r4171; CHECK-NEXT: rldicl r3, r3, 1, 63172; CHECK-NEXT: adde r3, r6, r3173; CHECK-NEXT: neg r3, r3174; CHECK-NEXT: std r3, glob@toc@l(r5)175; CHECK-NEXT: blr176; CHECK-BE-LABEL: test_lllesll_sext_store:177; CHECK-BE: # %bb.0: # %entry178; CHECK-BE-NEXT: rldicl r5, r3, 1, 63179; CHECK-BE-NEXT: sradi r6, r4, 63180; CHECK-BE-NEXT: subc r3, r4, r3181; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha182; CHECK-BE-NEXT: adde r3, r6, r5183; CHECK-BE-NEXT: neg r3, r3184; CHECK-BE-NEXT: std r3, glob@toc@l(r4)185; CHECK-BE-NEXT: blr186;187; CHECK-LE-LABEL: test_lllesll_sext_store:188; CHECK-LE: # %bb.0: # %entry189; CHECK-LE-NEXT: rldicl r5, r3, 1, 63190; CHECK-LE-NEXT: sradi r6, r4, 63191; CHECK-LE-NEXT: subc r3, r4, r3192; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha193; CHECK-LE-NEXT: adde r3, r6, r5194; CHECK-LE-NEXT: neg r3, r3195; CHECK-LE-NEXT: std r3, glob@toc@l(r4)196; CHECK-LE-NEXT: blr197entry:198 %cmp = icmp sle i64 %a, %b199 %conv1 = sext i1 %cmp to i64200 store i64 %conv1, ptr @glob, align 8201 ret void202}203 204; Function Attrs: norecurse nounwind205define dso_local void @test_lllesll_z_store(i64 %a) {206; CHECK-LABEL: test_lllesll_z_store:207; CHECK: # %bb.0: # %entry208; CHECK-NEXT: addi r5, r3, -1209; CHECK-NEXT: addis r4, r2, glob@toc@ha210; CHECK-NEXT: or r3, r5, r3211; CHECK-NEXT: rldicl r3, r3, 1, 63212; CHECK-NEXT: std r3, glob@toc@l(r4)213; CHECK-NEXT: blr214; CHECK-BE-LABEL: test_lllesll_z_store:215; CHECK-BE: # %bb.0: # %entry216; CHECK-BE-NEXT: addi r4, r3, -1217; CHECK-BE-NEXT: or r3, r4, r3218; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha219; CHECK-BE-NEXT: rldicl r3, r3, 1, 63220; CHECK-BE-NEXT: std r3, glob@toc@l(r4)221; CHECK-BE-NEXT: blr222;223; CHECK-LE-LABEL: test_lllesll_z_store:224; CHECK-LE: # %bb.0: # %entry225; CHECK-LE-NEXT: addi r4, r3, -1226; CHECK-LE-NEXT: or r3, r4, r3227; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha228; CHECK-LE-NEXT: rldicl r3, r3, 1, 63229; CHECK-LE-NEXT: std r3, glob@toc@l(r4)230; CHECK-LE-NEXT: blr231entry:232 %cmp = icmp slt i64 %a, 1233 %conv1 = zext i1 %cmp to i64234 store i64 %conv1, ptr @glob, align 8235 ret void236}237 238; Function Attrs: norecurse nounwind239define dso_local void @test_lllesll_sext_z_store(i64 %a) {240; CHECK-LABEL: test_lllesll_sext_z_store:241; CHECK: # %bb.0: # %entry242; CHECK-NEXT: addi r5, r3, -1243; CHECK-NEXT: addis r4, r2, glob@toc@ha244; CHECK-NEXT: or r3, r5, r3245; CHECK-NEXT: sradi r3, r3, 63246; CHECK-NEXT: std r3, glob@toc@l(r4)247; CHECK-NEXT: blr248; CHECK-BE-LABEL: test_lllesll_sext_z_store:249; CHECK-BE: # %bb.0: # %entry250; CHECK-BE-NEXT: addi r4, r3, -1251; CHECK-BE-NEXT: or r3, r4, r3252; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha253; CHECK-BE-NEXT: sradi r3, r3, 63254; CHECK-BE-NEXT: std r3, glob@toc@l(r4)255; CHECK-BE-NEXT: blr256;257; CHECK-LE-LABEL: test_lllesll_sext_z_store:258; CHECK-LE: # %bb.0: # %entry259; CHECK-LE-NEXT: addi r4, r3, -1260; CHECK-LE-NEXT: or r3, r4, r3261; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha262; CHECK-LE-NEXT: sradi r3, r3, 63263; CHECK-LE-NEXT: std r3, glob@toc@l(r4)264; CHECK-LE-NEXT: blr265entry:266 %cmp = icmp slt i64 %a, 1267 %conv1 = sext i1 %cmp to i64268 store i64 %conv1, ptr @glob, align 8269 ret void270}271