269 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 i8 0, align 19 10define dso_local signext i32 @test_ineuc(i8 zeroext %a, i8 zeroext %b) {11; CHECK-LABEL: test_ineuc:12; CHECK: # %bb.0: # %entry13; CHECK-NEXT: xor r3, r3, r414; CHECK-NEXT: cntlzw r3, r315; CHECK-NEXT: srwi r3, r3, 516; CHECK-NEXT: xori r3, r3, 117; CHECK-NEXT: blr18; CHECK-BE-LABEL: test_ineuc:19; CHECK-BE: # %bb.0: # %entry20; CHECK-BE-NEXT: xor r3, r3, r421; CHECK-BE-NEXT: cntlzw r3, r322; CHECK-BE-NEXT: srwi r3, r3, 523; CHECK-BE-NEXT: xori r3, r3, 124; CHECK-BE-NEXT: blr25;26; CHECK-LE-LABEL: test_ineuc:27; CHECK-LE: # %bb.0: # %entry28; CHECK-LE-NEXT: xor r3, r3, r429; CHECK-LE-NEXT: cntlzw r3, r330; CHECK-LE-NEXT: srwi r3, r3, 531; CHECK-LE-NEXT: xori r3, r3, 132; CHECK-LE-NEXT: blr33entry:34 %cmp = icmp ne i8 %a, %b35 %conv2 = zext i1 %cmp to i3236 ret i32 %conv237}38 39define dso_local signext i32 @test_ineuc_sext(i8 zeroext %a, i8 zeroext %b) {40; CHECK-LABEL: test_ineuc_sext:41; CHECK: # %bb.0: # %entry42; CHECK-NEXT: xor r3, r3, r443; CHECK-NEXT: cntlzw r3, r344; CHECK-NEXT: srwi r3, r3, 545; CHECK-NEXT: xori r3, r3, 146; CHECK-NEXT: neg r3, r347; CHECK-NEXT: blr48; CHECK-BE-LABEL: test_ineuc_sext:49; CHECK-BE: # %bb.0: # %entry50; CHECK-BE-NEXT: xor r3, r3, r451; CHECK-BE-NEXT: cntlzw r3, r352; CHECK-BE-NEXT: srwi r3, r3, 553; CHECK-BE-NEXT: xori r3, r3, 154; CHECK-BE-NEXT: neg r3, r355; CHECK-BE-NEXT: blr56;57; CHECK-LE-LABEL: test_ineuc_sext:58; CHECK-LE: # %bb.0: # %entry59; CHECK-LE-NEXT: xor r3, r3, r460; CHECK-LE-NEXT: cntlzw r3, r361; CHECK-LE-NEXT: srwi r3, r3, 562; CHECK-LE-NEXT: xori r3, r3, 163; CHECK-LE-NEXT: neg r3, r364; CHECK-LE-NEXT: blr65entry:66 %cmp = icmp ne i8 %a, %b67 %sub = sext i1 %cmp to i3268 ret i32 %sub69}70 71define dso_local signext i32 @test_ineuc_z(i8 zeroext %a) {72; CHECK-LABEL: test_ineuc_z:73; CHECK: # %bb.0: # %entry74; CHECK-NEXT: cntlzw r3, r375; CHECK-NEXT: srwi r3, r3, 576; CHECK-NEXT: xori r3, r3, 177; CHECK-NEXT: blr78; CHECK-BE-LABEL: test_ineuc_z:79; CHECK-BE: # %bb.0: # %entry80; CHECK-BE-NEXT: cntlzw r3, r381; CHECK-BE-NEXT: srwi r3, r3, 582; CHECK-BE-NEXT: xori r3, r3, 183; CHECK-BE-NEXT: blr84;85; CHECK-LE-LABEL: test_ineuc_z:86; CHECK-LE: # %bb.0: # %entry87; CHECK-LE-NEXT: cntlzw r3, r388; CHECK-LE-NEXT: srwi r3, r3, 589; CHECK-LE-NEXT: xori r3, r3, 190; CHECK-LE-NEXT: blr91entry:92 %cmp = icmp ne i8 %a, 093 %conv1 = zext i1 %cmp to i3294 ret i32 %conv195}96 97define dso_local signext i32 @test_ineuc_sext_z(i8 zeroext %a) {98; CHECK-LABEL: test_ineuc_sext_z:99; CHECK: # %bb.0: # %entry100; CHECK-NEXT: cntlzw r3, r3101; CHECK-NEXT: srwi r3, r3, 5102; CHECK-NEXT: xori r3, r3, 1103; CHECK-NEXT: neg r3, r3104; CHECK-NEXT: blr105; CHECK-BE-LABEL: test_ineuc_sext_z:106; CHECK-BE: # %bb.0: # %entry107; CHECK-BE-NEXT: cntlzw r3, r3108; CHECK-BE-NEXT: srwi r3, r3, 5109; CHECK-BE-NEXT: xori r3, r3, 1110; CHECK-BE-NEXT: neg r3, r3111; CHECK-BE-NEXT: blr112;113; CHECK-LE-LABEL: test_ineuc_sext_z:114; CHECK-LE: # %bb.0: # %entry115; CHECK-LE-NEXT: cntlzw r3, r3116; CHECK-LE-NEXT: srwi r3, r3, 5117; CHECK-LE-NEXT: xori r3, r3, 1118; CHECK-LE-NEXT: neg r3, r3119; CHECK-LE-NEXT: blr120entry:121 %cmp = icmp ne i8 %a, 0122 %sub = sext i1 %cmp to i32123 ret i32 %sub124}125 126define dso_local void @test_ineuc_store(i8 zeroext %a, i8 zeroext %b) {127; CHECK-LABEL: test_ineuc_store:128; CHECK: # %bb.0: # %entry129; CHECK-NEXT: xor r3, r3, r4130; CHECK-NEXT: addis r5, r2, glob@toc@ha131; CHECK-NEXT: cntlzw r3, r3132; CHECK-NEXT: srwi r3, r3, 5133; CHECK-NEXT: xori r3, r3, 1134; CHECK-NEXT: stb r3, glob@toc@l(r5)135; CHECK-NEXT: blr136; CHECK-BE-LABEL: test_ineuc_store:137; CHECK-BE: # %bb.0: # %entry138; CHECK-BE-NEXT: xor r3, r3, r4139; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha140; CHECK-BE-NEXT: cntlzw r3, r3141; CHECK-BE-NEXT: srwi r3, r3, 5142; CHECK-BE-NEXT: xori r3, r3, 1143; CHECK-BE-NEXT: stb r3, glob@toc@l(r4)144; CHECK-BE-NEXT: blr145;146; CHECK-LE-LABEL: test_ineuc_store:147; CHECK-LE: # %bb.0: # %entry148; CHECK-LE-NEXT: xor r3, r3, r4149; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha150; CHECK-LE-NEXT: cntlzw r3, r3151; CHECK-LE-NEXT: srwi r3, r3, 5152; CHECK-LE-NEXT: xori r3, r3, 1153; CHECK-LE-NEXT: stb r3, glob@toc@l(r4)154; CHECK-LE-NEXT: blr155entry:156 %cmp = icmp ne i8 %a, %b157 %conv3 = zext i1 %cmp to i8158 store i8 %conv3, ptr @glob, align 1159 ret void160}161 162define dso_local void @test_ineuc_sext_store(i8 zeroext %a, i8 zeroext %b) {163; CHECK-LABEL: test_ineuc_sext_store:164; CHECK: # %bb.0: # %entry165; CHECK-NEXT: xor r3, r3, r4166; CHECK-NEXT: addis r5, r2, glob@toc@ha167; CHECK-NEXT: cntlzw r3, r3168; CHECK-NEXT: srwi r3, r3, 5169; CHECK-NEXT: xori r3, r3, 1170; CHECK-NEXT: neg r3, r3171; CHECK-NEXT: stb r3, glob@toc@l(r5)172; CHECK-NEXT: blr173; CHECK-BE-LABEL: test_ineuc_sext_store:174; CHECK-BE: # %bb.0: # %entry175; CHECK-BE-NEXT: xor r3, r3, r4176; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha177; CHECK-BE-NEXT: cntlzw r3, r3178; CHECK-BE-NEXT: srwi r3, r3, 5179; CHECK-BE-NEXT: xori r3, r3, 1180; CHECK-BE-NEXT: neg r3, r3181; CHECK-BE-NEXT: stb r3, glob@toc@l(r4)182; CHECK-BE-NEXT: blr183;184; CHECK-LE-LABEL: test_ineuc_sext_store:185; CHECK-LE: # %bb.0: # %entry186; CHECK-LE-NEXT: xor r3, r3, r4187; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha188; CHECK-LE-NEXT: cntlzw r3, r3189; CHECK-LE-NEXT: srwi r3, r3, 5190; CHECK-LE-NEXT: xori r3, r3, 1191; CHECK-LE-NEXT: neg r3, r3192; CHECK-LE-NEXT: stb r3, glob@toc@l(r4)193; CHECK-LE-NEXT: blr194entry:195 %cmp = icmp ne i8 %a, %b196 %conv3 = sext i1 %cmp to i8197 store i8 %conv3, ptr @glob, align 1198 ret void199}200 201define dso_local void @test_ineuc_z_store(i8 zeroext %a) {202; CHECK-LABEL: test_ineuc_z_store:203; CHECK: # %bb.0: # %entry204; CHECK-NEXT: cntlzw r3, r3205; CHECK-NEXT: addis r4, r2, glob@toc@ha206; CHECK-NEXT: srwi r3, r3, 5207; CHECK-NEXT: xori r3, r3, 1208; CHECK-NEXT: stb r3, glob@toc@l(r4)209; CHECK-NEXT: blr210; CHECK-BE-LABEL: test_ineuc_z_store:211; CHECK-BE: # %bb.0: # %entry212; CHECK-BE-NEXT: cntlzw r3, r3213; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha214; CHECK-BE-NEXT: srwi r3, r3, 5215; CHECK-BE-NEXT: xori r3, r3, 1216; CHECK-BE-NEXT: stb r3, glob@toc@l(r4)217; CHECK-BE-NEXT: blr218;219; CHECK-LE-LABEL: test_ineuc_z_store:220; CHECK-LE: # %bb.0: # %entry221; CHECK-LE-NEXT: cntlzw r3, r3222; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha223; CHECK-LE-NEXT: srwi r3, r3, 5224; CHECK-LE-NEXT: xori r3, r3, 1225; CHECK-LE-NEXT: stb r3, glob@toc@l(r4)226; CHECK-LE-NEXT: blr227entry:228 %cmp = icmp ne i8 %a, 0229 %conv2 = zext i1 %cmp to i8230 store i8 %conv2, ptr @glob, align 1231 ret void232}233 234define dso_local void @test_ineuc_sext_z_store(i8 zeroext %a) {235; CHECK-LABEL: test_ineuc_sext_z_store:236; CHECK: # %bb.0: # %entry237; CHECK-NEXT: cntlzw r3, r3238; CHECK-NEXT: addis r4, r2, glob@toc@ha239; CHECK-NEXT: srwi r3, r3, 5240; CHECK-NEXT: xori r3, r3, 1241; CHECK-NEXT: neg r3, r3242; CHECK-NEXT: stb r3, glob@toc@l(r4)243; CHECK-NEXT: blr244; CHECK-BE-LABEL: test_ineuc_sext_z_store:245; CHECK-BE: # %bb.0: # %entry246; CHECK-BE-NEXT: cntlzw r3, r3247; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha248; CHECK-BE-NEXT: srwi r3, r3, 5249; CHECK-BE-NEXT: xori r3, r3, 1250; CHECK-BE-NEXT: neg r3, r3251; CHECK-BE-NEXT: stb r3, glob@toc@l(r4)252; CHECK-BE-NEXT: blr253;254; CHECK-LE-LABEL: test_ineuc_sext_z_store:255; CHECK-LE: # %bb.0: # %entry256; CHECK-LE-NEXT: cntlzw r3, r3257; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha258; CHECK-LE-NEXT: srwi r3, r3, 5259; CHECK-LE-NEXT: xori r3, r3, 1260; CHECK-LE-NEXT: neg r3, r3261; CHECK-LE-NEXT: stb r3, glob@toc@l(r4)262; CHECK-LE-NEXT: blr263entry:264 %cmp = icmp ne i8 %a, 0265 %conv2 = sext i1 %cmp to i8266 store i8 %conv2, ptr @glob, align 1267 ret void268}269