1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; 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 cmpl 5; 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 cmpl 8; ModuleID = 'ComparisonTestCases/testCompareslleqsc.c' 9 10@glob = dso_local local_unnamed_addr global i8 0, align 1 11 12; Function Attrs: norecurse nounwind readnone 13define i64 @test_lleqsc(i8 signext %a, i8 signext %b) { 14; CHECK-LABEL: test_lleqsc: 15; CHECK: # %bb.0: # %entry 16; CHECK-NEXT: xor r3, r3, r4 17; CHECK-NEXT: cntlzw r3, r3 18; CHECK-NEXT: srwi r3, r3, 5 19; CHECK-NEXT: blr 20; CHECK-BE-LABEL: test_lleqsc: 21; CHECK-BE: # %bb.0: # %entry 22; CHECK-BE-NEXT: xor r3, r3, r4 23; CHECK-BE-NEXT: cntlzw r3, r3 24; CHECK-BE-NEXT: srwi r3, r3, 5 25; CHECK-BE-NEXT: blr 26; 27; CHECK-LE-LABEL: test_lleqsc: 28; CHECK-LE: # %bb.0: # %entry 29; CHECK-LE-NEXT: xor r3, r3, r4 30; CHECK-LE-NEXT: cntlzw r3, r3 31; CHECK-LE-NEXT: srwi r3, r3, 5 32; CHECK-LE-NEXT: blr 33entry: 34 %cmp = icmp eq i8 %a, %b 35 %conv3 = zext i1 %cmp to i64 36 ret i64 %conv3 37} 38 39; Function Attrs: norecurse nounwind readnone 40define i64 @test_lleqsc_sext(i8 signext %a, i8 signext %b) { 41; CHECK-LABEL: test_lleqsc_sext: 42; CHECK: # %bb.0: # %entry 43; CHECK-NEXT: xor r3, r3, r4 44; CHECK-NEXT: cntlzw r3, r3 45; CHECK-NEXT: srwi r3, r3, 5 46; CHECK-NEXT: neg r3, r3 47; CHECK-NEXT: blr 48; CHECK-BE-LABEL: test_lleqsc_sext: 49; CHECK-BE: # %bb.0: # %entry 50; CHECK-BE-NEXT: xor r3, r3, r4 51; CHECK-BE-NEXT: cntlzw r3, r3 52; CHECK-BE-NEXT: srwi r3, r3, 5 53; CHECK-BE-NEXT: neg r3, r3 54; CHECK-BE-NEXT: blr 55; 56; CHECK-LE-LABEL: test_lleqsc_sext: 57; CHECK-LE: # %bb.0: # %entry 58; CHECK-LE-NEXT: xor r3, r3, r4 59; CHECK-LE-NEXT: cntlzw r3, r3 60; CHECK-LE-NEXT: srwi r3, r3, 5 61; CHECK-LE-NEXT: neg r3, r3 62; CHECK-LE-NEXT: blr 63entry: 64 %cmp = icmp eq i8 %a, %b 65 %conv3 = sext i1 %cmp to i64 66 ret i64 %conv3 67} 68 69; Function Attrs: norecurse nounwind readnone 70define i64 @test_lleqsc_z(i8 signext %a) { 71; CHECK-LABEL: test_lleqsc_z: 72; CHECK: # %bb.0: # %entry 73; CHECK-NEXT: cntlzw r3, r3 74; CHECK-NEXT: srwi r3, r3, 5 75; CHECK-NEXT: blr 76; CHECK-BE-LABEL: test_lleqsc_z: 77; CHECK-BE: # %bb.0: # %entry 78; CHECK-BE-NEXT: cntlzw r3, r3 79; CHECK-BE-NEXT: srwi r3, r3, 5 80; CHECK-BE-NEXT: blr 81; 82; CHECK-LE-LABEL: test_lleqsc_z: 83; CHECK-LE: # %bb.0: # %entry 84; CHECK-LE-NEXT: cntlzw r3, r3 85; CHECK-LE-NEXT: srwi r3, r3, 5 86; CHECK-LE-NEXT: blr 87entry: 88 %cmp = icmp eq i8 %a, 0 89 %conv2 = zext i1 %cmp to i64 90 ret i64 %conv2 91} 92 93; Function Attrs: norecurse nounwind readnone 94define i64 @test_lleqsc_sext_z(i8 signext %a) { 95; CHECK-LABEL: test_lleqsc_sext_z: 96; CHECK: # %bb.0: # %entry 97; CHECK-NEXT: cntlzw r3, r3 98; CHECK-NEXT: srwi r3, r3, 5 99; CHECK-NEXT: neg r3, r3 100; CHECK-NEXT: blr 101; CHECK-BE-LABEL: test_lleqsc_sext_z: 102; CHECK-BE: # %bb.0: # %entry 103; CHECK-BE-NEXT: cntlzw r3, r3 104; CHECK-BE-NEXT: srwi r3, r3, 5 105; CHECK-BE-NEXT: neg r3, r3 106; CHECK-BE-NEXT: blr 107; 108; CHECK-LE-LABEL: test_lleqsc_sext_z: 109; CHECK-LE: # %bb.0: # %entry 110; CHECK-LE-NEXT: cntlzw r3, r3 111; CHECK-LE-NEXT: srwi r3, r3, 5 112; CHECK-LE-NEXT: neg r3, r3 113; CHECK-LE-NEXT: blr 114entry: 115 %cmp = icmp eq i8 %a, 0 116 %conv2 = sext i1 %cmp to i64 117 ret i64 %conv2 118} 119 120; Function Attrs: norecurse nounwind 121define dso_local void @test_lleqsc_store(i8 signext %a, i8 signext %b) { 122; CHECK-LABEL: test_lleqsc_store: 123; CHECK: # %bb.0: # %entry 124; CHECK-NEXT: xor r3, r3, r4 125; CHECK-NEXT: addis r5, r2, glob@toc@ha 126; CHECK-NEXT: cntlzw r3, r3 127; CHECK-NEXT: srwi r3, r3, 5 128; CHECK-NEXT: stb r3, glob@toc@l(r5) 129; CHECK-NEXT: blr 130; CHECK-BE-LABEL: test_lleqsc_store: 131; CHECK-BE: # %bb.0: # %entry 132; CHECK-BE-NEXT: xor r3, r3, r4 133; CHECK-BE-NEXT: addis r5, r2, glob@toc@ha 134; CHECK-BE-NEXT: cntlzw r3, r3 135; CHECK-BE-NEXT: srwi r3, r3, 5 136; CHECK-BE-NEXT: stb r3, glob@toc@l(r5) 137; CHECK-BE-NEXT: blr 138; 139; CHECK-LE-LABEL: test_lleqsc_store: 140; CHECK-LE: # %bb.0: # %entry 141; CHECK-LE-NEXT: xor r3, r3, r4 142; CHECK-LE-NEXT: addis r5, r2, glob@toc@ha 143; CHECK-LE-NEXT: cntlzw r3, r3 144; CHECK-LE-NEXT: srwi r3, r3, 5 145; CHECK-LE-NEXT: stb r3, glob@toc@l(r5) 146; CHECK-LE-NEXT: blr 147entry: 148 %cmp = icmp eq i8 %a, %b 149 %conv3 = zext i1 %cmp to i8 150 store i8 %conv3, i8* @glob, align 1 151 ret void 152} 153 154; Function Attrs: norecurse nounwind 155define dso_local void @test_lleqsc_sext_store(i8 signext %a, i8 signext %b) { 156; CHECK-LABEL: test_lleqsc_sext_store: 157; CHECK: # %bb.0: # %entry 158; CHECK-NEXT: xor r3, r3, r4 159; CHECK-NEXT: addis r5, r2, glob@toc@ha 160; CHECK-NEXT: cntlzw r3, r3 161; CHECK-NEXT: srwi r3, r3, 5 162; CHECK-NEXT: neg r3, r3 163; CHECK-NEXT: stb r3, glob@toc@l(r5) 164; CHECK-NEXT: blr 165; CHECK-BE-LABEL: test_lleqsc_sext_store: 166; CHECK-BE: # %bb.0: # %entry 167; CHECK-BE-NEXT: xor r3, r3, r4 168; CHECK-BE-NEXT: addis r5, r2, glob@toc@ha 169; CHECK-BE-NEXT: cntlzw r3, r3 170; CHECK-BE-NEXT: srwi r3, r3, 5 171; CHECK-BE-NEXT: neg r3, r3 172; CHECK-BE-NEXT: stb r3, glob@toc@l(r5) 173; CHECK-BE-NEXT: blr 174; 175; CHECK-LE-LABEL: test_lleqsc_sext_store: 176; CHECK-LE: # %bb.0: # %entry 177; CHECK-LE-NEXT: xor r3, r3, r4 178; CHECK-LE-NEXT: addis r5, r2, glob@toc@ha 179; CHECK-LE-NEXT: cntlzw r3, r3 180; CHECK-LE-NEXT: srwi r3, r3, 5 181; CHECK-LE-NEXT: neg r3, r3 182; CHECK-LE-NEXT: stb r3, glob@toc@l(r5) 183; CHECK-LE-NEXT: blr 184entry: 185 %cmp = icmp eq i8 %a, %b 186 %conv3 = sext i1 %cmp to i8 187 store i8 %conv3, i8* @glob, align 1 188 ret void 189} 190 191; Function Attrs: norecurse nounwind 192define dso_local void @test_lleqsc_z_store(i8 signext %a) { 193; CHECK-LABEL: test_lleqsc_z_store: 194; CHECK: # %bb.0: # %entry 195; CHECK-NEXT: cntlzw r3, r3 196; CHECK-NEXT: addis r4, r2, glob@toc@ha 197; CHECK-NEXT: srwi r3, r3, 5 198; CHECK-NEXT: stb r3, glob@toc@l(r4) 199; CHECK-NEXT: blr 200; CHECK-BE-LABEL: test_lleqsc_z_store: 201; CHECK-BE: # %bb.0: # %entry 202; CHECK-BE-NEXT: cntlzw r3, r3 203; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha 204; CHECK-BE-NEXT: srwi r3, r3, 5 205; CHECK-BE-NEXT: stb r3, glob@toc@l(r4) 206; CHECK-BE-NEXT: blr 207; 208; CHECK-LE-LABEL: test_lleqsc_z_store: 209; CHECK-LE: # %bb.0: # %entry 210; CHECK-LE-NEXT: cntlzw r3, r3 211; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha 212; CHECK-LE-NEXT: srwi r3, r3, 5 213; CHECK-LE-NEXT: stb r3, glob@toc@l(r4) 214; CHECK-LE-NEXT: blr 215entry: 216 %cmp = icmp eq i8 %a, 0 217 %conv2 = zext i1 %cmp to i8 218 store i8 %conv2, i8* @glob, align 1 219 ret void 220} 221 222; Function Attrs: norecurse nounwind 223define dso_local void @test_lleqsc_sext_z_store(i8 signext %a) { 224; CHECK-LABEL: test_lleqsc_sext_z_store: 225; CHECK: # %bb.0: # %entry 226; CHECK-NEXT: cntlzw r3, r3 227; CHECK-NEXT: addis r4, r2, glob@toc@ha 228; CHECK-NEXT: srwi r3, r3, 5 229; CHECK-NEXT: neg r3, r3 230; CHECK-NEXT: stb r3, glob@toc@l(r4) 231; CHECK-NEXT: blr 232; CHECK-BE-LABEL: test_lleqsc_sext_z_store: 233; CHECK-BE: # %bb.0: # %entry 234; CHECK-BE-NEXT: cntlzw r3, r3 235; CHECK-BE-NEXT: addis r4, r2, glob@toc@ha 236; CHECK-BE-NEXT: srwi r3, r3, 5 237; CHECK-BE-NEXT: neg r3, r3 238; CHECK-BE-NEXT: stb r3, glob@toc@l(r4) 239; CHECK-BE-NEXT: blr 240; 241; CHECK-LE-LABEL: test_lleqsc_sext_z_store: 242; CHECK-LE: # %bb.0: # %entry 243; CHECK-LE-NEXT: cntlzw r3, r3 244; CHECK-LE-NEXT: addis r4, r2, glob@toc@ha 245; CHECK-LE-NEXT: srwi r3, r3, 5 246; CHECK-LE-NEXT: neg r3, r3 247; CHECK-LE-NEXT: stb r3, glob@toc@l(r4) 248; CHECK-LE-NEXT: blr 249entry: 250 %cmp = icmp eq i8 %a, 0 251 %conv2 = sext i1 %cmp to i8 252 store i8 %conv2, i8* @glob, align 1 253 ret void 254} 255