270 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 9@glob = dso_local local_unnamed_addr global i16 0, align 210 11define dso_local signext i32 @test_iness(i16 signext %a, i16 signext %b) {12; CHECK-LABEL: test_iness:13; CHECK: # %bb.0: # %entry14; CHECK-NEXT: xor r3, r3, r415; CHECK-NEXT: cntlzw r3, r316; CHECK-NEXT: srwi r3, r3, 517; CHECK-NEXT: xori r3, r3, 118; CHECK-NEXT: blr19; CHECK-BE-LABEL: test_iness:20; CHECK-BE: # %bb.0: # %entry21; CHECK-BE-NEXT: xor r3, r3, r422; CHECK-BE-NEXT: cntlzw r3, r323; CHECK-BE-NEXT: srwi r3, r3, 524; CHECK-BE-NEXT: xori r3, r3, 125; CHECK-BE-NEXT: blr26;27; CHECK-LE-LABEL: test_iness:28; CHECK-LE: # %bb.0: # %entry29; CHECK-LE-NEXT: xor r3, r3, r430; CHECK-LE-NEXT: cntlzw r3, r331; CHECK-LE-NEXT: srwi r3, r3, 532; CHECK-LE-NEXT: xori r3, r3, 133; CHECK-LE-NEXT: blr34entry:35 %cmp = icmp ne i16 %a, %b36 %conv2 = zext i1 %cmp to i3237 ret i32 %conv238}39 40define dso_local signext i32 @test_iness_sext(i16 signext %a, i16 signext %b) {41; CHECK-LABEL: test_iness_sext:42; CHECK: # %bb.0: # %entry43; CHECK-NEXT: xor r3, r3, r444; CHECK-NEXT: cntlzw r3, r345; CHECK-NEXT: srwi r3, r3, 546; CHECK-NEXT: xori r3, r3, 147; CHECK-NEXT: neg r3, r348; CHECK-NEXT: blr49; CHECK-BE-LABEL: test_iness_sext:50; CHECK-BE: # %bb.0: # %entry51; CHECK-BE-NEXT: xor r3, r3, r452; CHECK-BE-NEXT: cntlzw r3, r353; CHECK-BE-NEXT: srwi r3, r3, 554; CHECK-BE-NEXT: xori r3, r3, 155; CHECK-BE-NEXT: neg r3, r356; CHECK-BE-NEXT: blr57;58; CHECK-LE-LABEL: test_iness_sext:59; CHECK-LE: # %bb.0: # %entry60; CHECK-LE-NEXT: xor r3, r3, r461; CHECK-LE-NEXT: cntlzw r3, r362; CHECK-LE-NEXT: srwi r3, r3, 563; CHECK-LE-NEXT: xori r3, r3, 164; CHECK-LE-NEXT: neg r3, r365; CHECK-LE-NEXT: blr66entry:67 %cmp = icmp ne i16 %a, %b68 %sub = sext i1 %cmp to i3269 ret i32 %sub70}71 72define dso_local signext i32 @test_iness_z(i16 signext %a) {73; CHECK-LABEL: test_iness_z:74; CHECK: # %bb.0: # %entry75; CHECK-NEXT: cntlzw r3, r376; CHECK-NEXT: srwi r3, r3, 577; CHECK-NEXT: xori r3, r3, 178; CHECK-NEXT: blr79; CHECK-BE-LABEL: test_iness_z:80; CHECK-BE: # %bb.0: # %entry81; CHECK-BE-NEXT: cntlzw r3, r382; CHECK-BE-NEXT: srwi r3, r3, 583; CHECK-BE-NEXT: xori r3, r3, 184; CHECK-BE-NEXT: blr85;86; CHECK-LE-LABEL: test_iness_z:87; CHECK-LE: # %bb.0: # %entry88; CHECK-LE-NEXT: cntlzw r3, r389; CHECK-LE-NEXT: srwi r3, r3, 590; CHECK-LE-NEXT: xori r3, r3, 191; CHECK-LE-NEXT: blr92entry:93 %cmp = icmp ne i16 %a, 094 %conv1 = zext i1 %cmp to i3295 ret i32 %conv196}97 98define dso_local signext i32 @test_iness_sext_z(i16 signext %a) {99; CHECK-LABEL: test_iness_sext_z:100; CHECK: # %bb.0: # %entry101; CHECK-NEXT: cntlzw r3, r3102; CHECK-NEXT: srwi r3, r3, 5103; CHECK-NEXT: xori r3, r3, 1104; CHECK-NEXT: neg r3, r3105; CHECK-NEXT: blr106; CHECK-BE-LABEL: test_iness_sext_z:107; CHECK-BE: # %bb.0: # %entry108; CHECK-BE-NEXT: cntlzw r3, r3109; CHECK-BE-NEXT: srwi r3, r3, 5110; CHECK-BE-NEXT: xori r3, r3, 1111; CHECK-BE-NEXT: neg r3, r3112; CHECK-BE-NEXT: blr113;114; CHECK-LE-LABEL: test_iness_sext_z:115; CHECK-LE: # %bb.0: # %entry116; CHECK-LE-NEXT: cntlzw r3, r3117; CHECK-LE-NEXT: srwi r3, r3, 5118; CHECK-LE-NEXT: xori r3, r3, 1119; CHECK-LE-NEXT: neg r3, r3120; CHECK-LE-NEXT: blr121entry:122 %cmp = icmp ne i16 %a, 0123 %sub = sext i1 %cmp to i32124 ret i32 %sub125}126 127define dso_local void @test_iness_store(i16 signext %a, i16 signext %b) {128; CHECK-LABEL: test_iness_store:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: xor r3, r3, r4131; CHECK-NEXT: addis r5, r2, glob@toc@ha132; CHECK-NEXT: cntlzw r3, r3133; CHECK-NEXT: srwi r3, r3, 5134; CHECK-NEXT: xori r3, r3, 1135; CHECK-NEXT: sth r3, glob@toc@l(r5)136; CHECK-NEXT: blr137; CHECK-BE-LABEL: test_iness_store:138; CHECK-BE: # %bb.0: # %entry139; CHECK-BE-NEXT: xor r3, r3, r4140; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha141; CHECK-BE-NEXT: cntlzw r3, r3142; CHECK-BE-NEXT: srwi r3, r3, 5143; CHECK-BE-NEXT: xori r3, r3, 1144; CHECK-BE-NEXT: sth r3, glob@toc@l(r4)145; CHECK-BE-NEXT: blr146;147; CHECK-LE-LABEL: test_iness_store:148; CHECK-LE: # %bb.0: # %entry149; CHECK-LE-NEXT: xor r3, r3, r4150; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha151; CHECK-LE-NEXT: cntlzw r3, r3152; CHECK-LE-NEXT: srwi r3, r3, 5153; CHECK-LE-NEXT: xori r3, r3, 1154; CHECK-LE-NEXT: sth r3, glob@toc@l(r4)155; CHECK-LE-NEXT: blr156entry:157 %cmp = icmp ne i16 %a, %b158 %conv3 = zext i1 %cmp to i16159 store i16 %conv3, ptr @glob, align 2160 ret void161}162 163define dso_local void @test_iness_sext_store(i16 signext %a, i16 signext %b) {164; CHECK-LABEL: test_iness_sext_store:165; CHECK: # %bb.0: # %entry166; CHECK-NEXT: xor r3, r3, r4167; CHECK-NEXT: addis r5, r2, glob@toc@ha168; CHECK-NEXT: cntlzw r3, r3169; CHECK-NEXT: srwi r3, r3, 5170; CHECK-NEXT: xori r3, r3, 1171; CHECK-NEXT: neg r3, r3172; CHECK-NEXT: sth r3, glob@toc@l(r5)173; CHECK-NEXT: blr174; CHECK-BE-LABEL: test_iness_sext_store:175; CHECK-BE: # %bb.0: # %entry176; CHECK-BE-NEXT: xor r3, r3, r4177; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha178; CHECK-BE-NEXT: cntlzw r3, r3179; CHECK-BE-NEXT: srwi r3, r3, 5180; CHECK-BE-NEXT: xori r3, r3, 1181; CHECK-BE-NEXT: neg r3, r3182; CHECK-BE-NEXT: sth r3, glob@toc@l(r4)183; CHECK-BE-NEXT: blr184;185; CHECK-LE-LABEL: test_iness_sext_store:186; CHECK-LE: # %bb.0: # %entry187; CHECK-LE-NEXT: xor r3, r3, r4188; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha189; CHECK-LE-NEXT: cntlzw r3, r3190; CHECK-LE-NEXT: srwi r3, r3, 5191; CHECK-LE-NEXT: xori r3, r3, 1192; CHECK-LE-NEXT: neg r3, r3193; CHECK-LE-NEXT: sth r3, glob@toc@l(r4)194; CHECK-LE-NEXT: blr195entry:196 %cmp = icmp ne i16 %a, %b197 %conv3 = sext i1 %cmp to i16198 store i16 %conv3, ptr @glob, align 2199 ret void200}201 202define dso_local void @test_iness_z_store(i16 signext %a) {203; CHECK-LABEL: test_iness_z_store:204; CHECK: # %bb.0: # %entry205; CHECK-NEXT: cntlzw r3, r3206; CHECK-NEXT: addis r4, r2, glob@toc@ha207; CHECK-NEXT: srwi r3, r3, 5208; CHECK-NEXT: xori r3, r3, 1209; CHECK-NEXT: sth r3, glob@toc@l(r4)210; CHECK-NEXT: blr211; CHECK-BE-LABEL: test_iness_z_store:212; CHECK-BE: # %bb.0: # %entry213; CHECK-BE-NEXT: cntlzw r3, r3214; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha215; CHECK-BE-NEXT: srwi r3, r3, 5216; CHECK-BE-NEXT: xori r3, r3, 1217; CHECK-BE-NEXT: sth r3, glob@toc@l(r4)218; CHECK-BE-NEXT: blr219;220; CHECK-LE-LABEL: test_iness_z_store:221; CHECK-LE: # %bb.0: # %entry222; CHECK-LE-NEXT: cntlzw r3, r3223; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha224; CHECK-LE-NEXT: srwi r3, r3, 5225; CHECK-LE-NEXT: xori r3, r3, 1226; CHECK-LE-NEXT: sth r3, glob@toc@l(r4)227; CHECK-LE-NEXT: blr228entry:229 %cmp = icmp ne i16 %a, 0230 %conv2 = zext i1 %cmp to i16231 store i16 %conv2, ptr @glob, align 2232 ret void233}234 235define dso_local void @test_iness_sext_z_store(i16 signext %a) {236; CHECK-LABEL: test_iness_sext_z_store:237; CHECK: # %bb.0: # %entry238; CHECK-NEXT: cntlzw r3, r3239; CHECK-NEXT: addis r4, r2, glob@toc@ha240; CHECK-NEXT: srwi r3, r3, 5241; CHECK-NEXT: xori r3, r3, 1242; CHECK-NEXT: neg r3, r3243; CHECK-NEXT: sth r3, glob@toc@l(r4)244; CHECK-NEXT: blr245; CHECK-BE-LABEL: test_iness_sext_z_store:246; CHECK-BE: # %bb.0: # %entry247; CHECK-BE-NEXT: cntlzw r3, r3248; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha249; CHECK-BE-NEXT: srwi r3, r3, 5250; CHECK-BE-NEXT: xori r3, r3, 1251; CHECK-BE-NEXT: neg r3, r3252; CHECK-BE-NEXT: sth r3, glob@toc@l(r4)253; CHECK-BE-NEXT: blr254;255; CHECK-LE-LABEL: test_iness_sext_z_store:256; CHECK-LE: # %bb.0: # %entry257; CHECK-LE-NEXT: cntlzw r3, r3258; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha259; CHECK-LE-NEXT: srwi r3, r3, 5260; CHECK-LE-NEXT: xori r3, r3, 1261; CHECK-LE-NEXT: neg r3, r3262; CHECK-LE-NEXT: sth r3, glob@toc@l(r4)263; CHECK-LE-NEXT: blr264entry:265 %cmp = icmp ne i16 %a, 0266 %conv2 = sext i1 %cmp to i16267 store i16 %conv2, ptr @glob, align 2268 ret void269}270