251 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 10define dso_local signext i32 @test_igesll(i64 %a, i64 %b) {11; CHECK-LABEL: test_igesll:12; CHECK: # %bb.0: # %entry13; CHECK-NEXT: sradi r5, r3, 6314; CHECK-NEXT: rldicl r6, r4, 1, 6315; CHECK-NEXT: subfc r3, r4, r316; CHECK-NEXT: adde r3, r5, r617; CHECK-NEXT: blr18; CHECK-BE-LABEL: test_igesll:19; CHECK-BE: # %bb.0: # %entry20; CHECK-BE-NEXT: rldicl r5, r4, 1, 6321; CHECK-BE-NEXT: sradi r6, r3, 6322; CHECK-BE-NEXT: subc r3, r3, r423; CHECK-BE-NEXT: adde r3, r6, r524; CHECK-BE-NEXT: blr25;26; CHECK-LE-LABEL: test_igesll:27; CHECK-LE: # %bb.0: # %entry28; CHECK-LE-NEXT: rldicl r5, r4, 1, 6329; CHECK-LE-NEXT: sradi r6, r3, 6330; CHECK-LE-NEXT: subc r3, r3, r431; CHECK-LE-NEXT: adde r3, r6, r532; CHECK-LE-NEXT: blr33entry:34 %cmp = icmp sge i64 %a, %b35 %conv = zext i1 %cmp to i3236 ret i32 %conv37}38 39define dso_local signext i32 @test_igesll_sext(i64 %a, i64 %b) {40; CHECK-LABEL: test_igesll_sext:41; CHECK: # %bb.0: # %entry42; CHECK-NEXT: sradi r5, r3, 6343; CHECK-NEXT: rldicl r6, r4, 1, 6344; CHECK-NEXT: subfc r3, r4, r345; CHECK-NEXT: adde r3, r5, r646; CHECK-NEXT: neg r3, r347; CHECK-NEXT: blr48; CHECK-BE-LABEL: test_igesll_sext:49; CHECK-BE: # %bb.0: # %entry50; CHECK-BE-NEXT: rldicl r5, r4, 1, 6351; CHECK-BE-NEXT: sradi r6, r3, 6352; CHECK-BE-NEXT: subc r3, r3, r453; CHECK-BE-NEXT: adde r3, r6, r554; CHECK-BE-NEXT: neg r3, r355; CHECK-BE-NEXT: blr56;57; CHECK-LE-LABEL: test_igesll_sext:58; CHECK-LE: # %bb.0: # %entry59; CHECK-LE-NEXT: rldicl r5, r4, 1, 6360; CHECK-LE-NEXT: sradi r6, r3, 6361; CHECK-LE-NEXT: subc r3, r3, r462; CHECK-LE-NEXT: adde r3, r6, r563; CHECK-LE-NEXT: neg r3, r364; CHECK-LE-NEXT: blr65entry:66 %cmp = icmp sge i64 %a, %b67 %sub = sext i1 %cmp to i3268 ret i32 %sub69}70 71define dso_local signext i32 @test_igesll_z(i64 %a) {72; CHECK-LABEL: test_igesll_z:73; CHECK: # %bb.0: # %entry74; CHECK-NEXT: not r3, r375; CHECK-NEXT: rldicl r3, r3, 1, 6376; CHECK-NEXT: blr77; CHECK-BE-LABEL: test_igesll_z:78; CHECK-BE: # %bb.0: # %entry79; CHECK-BE-NEXT: not r3, r380; CHECK-BE-NEXT: rldicl r3, r3, 1, 6381; CHECK-BE-NEXT: blr82;83; CHECK-LE-LABEL: test_igesll_z:84; CHECK-LE: # %bb.0: # %entry85; CHECK-LE-NEXT: not r3, r386; CHECK-LE-NEXT: rldicl r3, r3, 1, 6387; CHECK-LE-NEXT: blr88entry:89 %cmp = icmp sgt i64 %a, -190 %conv = zext i1 %cmp to i3291 ret i32 %conv92}93 94define dso_local signext i32 @test_igesll_sext_z(i64 %a) {95; CHECK-LABEL: test_igesll_sext_z:96; CHECK: # %bb.0: # %entry97; CHECK-NEXT: sradi r3, r3, 6398; CHECK-NEXT: not r3, r399; CHECK-NEXT: blr100; CHECK-BE-LABEL: test_igesll_sext_z:101; CHECK-BE: # %bb.0: # %entry102; CHECK-BE-NEXT: not r3, r3103; CHECK-BE-NEXT: sradi r3, r3, 63104; CHECK-BE-NEXT: blr105;106; CHECK-LE-LABEL: test_igesll_sext_z:107; CHECK-LE: # %bb.0: # %entry108; CHECK-LE-NEXT: not r3, r3109; CHECK-LE-NEXT: sradi r3, r3, 63110; CHECK-LE-NEXT: blr111entry:112 %cmp = icmp sgt i64 %a, -1113 %sub = sext i1 %cmp to i32114 ret i32 %sub115}116 117define dso_local void @test_igesll_store(i64 %a, i64 %b) {118; CHECK-LABEL: test_igesll_store:119; CHECK: # %bb.0: # %entry120; CHECK-NEXT: sradi r6, r3, 63121; CHECK-NEXT: addis r5, r2, glob@toc@ha122; CHECK-NEXT: subfc r3, r4, r3123; CHECK-NEXT: rldicl r3, r4, 1, 63124; CHECK-NEXT: adde r3, r6, r3125; CHECK-NEXT: std r3, glob@toc@l(r5)126; CHECK-NEXT: blr127; CHECK-BE-LABEL: test_igesll_store:128; CHECK-BE: # %bb.0: # %entry129; CHECK-BE-NEXT: rldicl r5, r4, 1, 63130; CHECK-BE-NEXT: sradi r6, r3, 63131; CHECK-BE-NEXT: subc r3, r3, r4132; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha133; CHECK-BE-NEXT: adde r3, r6, r5134; CHECK-BE-NEXT: std r3, glob@toc@l(r4)135; CHECK-BE-NEXT: blr136;137; CHECK-LE-LABEL: test_igesll_store:138; CHECK-LE: # %bb.0: # %entry139; CHECK-LE-NEXT: rldicl r5, r4, 1, 63140; CHECK-LE-NEXT: sradi r6, r3, 63141; CHECK-LE-NEXT: subc r3, r3, r4142; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha143; CHECK-LE-NEXT: adde r3, r6, r5144; CHECK-LE-NEXT: std r3, glob@toc@l(r4)145; CHECK-LE-NEXT: blr146entry:147 %cmp = icmp sge i64 %a, %b148 %conv1 = zext i1 %cmp to i64149 store i64 %conv1, ptr @glob, align 8150 ret void151}152 153define dso_local void @test_igesll_sext_store(i64 %a, i64 %b) {154; CHECK-LABEL: test_igesll_sext_store:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: sradi r6, r3, 63157; CHECK-NEXT: addis r5, r2, glob@toc@ha158; CHECK-NEXT: subfc r3, r4, r3159; CHECK-NEXT: rldicl r3, r4, 1, 63160; CHECK-NEXT: adde r3, r6, r3161; CHECK-NEXT: neg r3, r3162; CHECK-NEXT: std r3, glob@toc@l(r5)163; CHECK-NEXT: blr164; CHECK-BE-LABEL: test_igesll_sext_store:165; CHECK-BE: # %bb.0: # %entry166; CHECK-BE-NEXT: rldicl r5, r4, 1, 63167; CHECK-BE-NEXT: sradi r6, r3, 63168; CHECK-BE-NEXT: subc r3, r3, r4169; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha170; CHECK-BE-NEXT: adde r3, r6, r5171; CHECK-BE-NEXT: neg r3, r3172; CHECK-BE-NEXT: std r3, glob@toc@l(r4)173; CHECK-BE-NEXT: blr174;175; CHECK-LE-LABEL: test_igesll_sext_store:176; CHECK-LE: # %bb.0: # %entry177; CHECK-LE-NEXT: rldicl r5, r4, 1, 63178; CHECK-LE-NEXT: sradi r6, r3, 63179; CHECK-LE-NEXT: subc r3, r3, r4180; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha181; CHECK-LE-NEXT: adde r3, r6, r5182; CHECK-LE-NEXT: neg r3, r3183; CHECK-LE-NEXT: std r3, glob@toc@l(r4)184; CHECK-LE-NEXT: blr185entry:186 %cmp = icmp sge i64 %a, %b187 %conv1 = sext i1 %cmp to i64188 store i64 %conv1, ptr @glob, align 8189 ret void190}191 192define dso_local void @test_igesll_z_store(i64 %a) {193; CHECK-LABEL: test_igesll_z_store:194; CHECK: # %bb.0: # %entry195; CHECK-NEXT: not r3, r3196; CHECK-NEXT: addis r4, r2, glob@toc@ha197; CHECK-NEXT: rldicl r3, r3, 1, 63198; CHECK-NEXT: std r3, glob@toc@l(r4)199; CHECK-NEXT: blr200; CHECK-BE-LABEL: test_igesll_z_store:201; CHECK-BE: # %bb.0: # %entry202; CHECK-BE-NEXT: not r3, r3203; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha204; CHECK-BE-NEXT: rldicl r3, r3, 1, 63205; CHECK-BE-NEXT: std r3, glob@toc@l(r4)206; CHECK-BE-NEXT: blr207;208; CHECK-LE-LABEL: test_igesll_z_store:209; CHECK-LE: # %bb.0: # %entry210; CHECK-LE-NEXT: not r3, r3211; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha212; CHECK-LE-NEXT: rldicl r3, r3, 1, 63213; CHECK-LE-NEXT: std r3, glob@toc@l(r4)214; CHECK-LE-NEXT: blr215entry:216 %cmp = icmp sgt i64 %a, -1217 %conv1 = zext i1 %cmp to i64218 store i64 %conv1, ptr @glob, align 8219 ret void220}221 222define dso_local void @test_igesll_sext_z_store(i64 %a) {223; CHECK-LABEL: test_igesll_sext_z_store:224; CHECK: # %bb.0: # %entry225; CHECK-NEXT: not r3, r3226; CHECK-NEXT: addis r4, r2, glob@toc@ha227; CHECK-NEXT: sradi r3, r3, 63228; CHECK-NEXT: std r3, glob@toc@l(r4)229; CHECK-NEXT: blr230; CHECK-BE-LABEL: test_igesll_sext_z_store:231; CHECK-BE: # %bb.0: # %entry232; CHECK-BE-NEXT: not r3, r3233; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha234; CHECK-BE-NEXT: sradi r3, r3, 63235; CHECK-BE-NEXT: std r3, glob@toc@l(r4)236; CHECK-BE-NEXT: blr237;238; CHECK-LE-LABEL: test_igesll_sext_z_store:239; CHECK-LE: # %bb.0: # %entry240; CHECK-LE-NEXT: not r3, r3241; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha242; CHECK-LE-NEXT: sradi r3, r3, 63243; CHECK-LE-NEXT: std r3, glob@toc@l(r4)244; CHECK-LE-NEXT: blr245entry:246 %cmp = icmp sgt i64 %a, -1247 %conv1 = sext i1 %cmp to i64248 store i64 %conv1, ptr @glob, align 8249 ret void250}251