1; XFAIL: * 2; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 3; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \ 4; RUN: -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \ 5; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl 6; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \ 7; RUN: -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \ 8; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl 9; ModuleID = 'ComparisonTestCases/testComparesiequi.c' 10 11@glob = common local_unnamed_addr global i32 0, align 4 12 13; Function Attrs: norecurse nounwind readnone 14define signext i32 @test_iequi(i32 zeroext %a, i32 zeroext %b) { 15; CHECK-LABEL: test_iequi: 16; CHECK: # BB#0: # %entry 17; CHECK-NEXT: xor r3, r3, r4 18; CHECK-NEXT: cntlzw r3, r3 19; CHECK-NEXT: srwi r3, r3, 5 20; CHECK-NEXT: blr 21entry: 22 %cmp = icmp eq i32 %a, %b 23 %conv = zext i1 %cmp to i32 24 ret i32 %conv 25} 26 27; Function Attrs: norecurse nounwind readnone 28define signext i32 @test_iequi_sext(i32 zeroext %a, i32 zeroext %b) { 29; CHECK-LABEL: test_iequi_sext: 30; CHECK: # BB#0: # %entry 31; CHECK-NEXT: xor r3, r3, r4 32; CHECK-NEXT: cntlzw r3, r3 33; CHECK-NEXT: srwi r3, r3, 5 34; CHECK-NEXT: neg r3, r3 35; CHECK-NEXT: blr 36entry: 37 %cmp = icmp eq i32 %a, %b 38 %sub = sext i1 %cmp to i32 39 ret i32 %sub 40} 41 42; Function Attrs: norecurse nounwind readnone 43define signext i32 @test_iequi_z(i32 zeroext %a) { 44; CHECK-LABEL: test_iequi_z: 45; CHECK: # BB#0: # %entry 46; CHECK-NEXT: cntlzw r3, r3 47; CHECK-NEXT: srwi r3, r3, 5 48; CHECK-NEXT: blr 49entry: 50 %cmp = icmp eq i32 %a, 0 51 %conv = zext i1 %cmp to i32 52 ret i32 %conv 53} 54 55; Function Attrs: norecurse nounwind readnone 56define signext i32 @test_iequi_sext_z(i32 zeroext %a) { 57; CHECK-LABEL: test_iequi_sext_z: 58; CHECK: # BB#0: # %entry 59; CHECK-NEXT: cntlzw r3, r3 60; CHECK-NEXT: srwi r3, r3, 5 61; CHECK-NEXT: neg r3, r3 62; CHECK-NEXT: blr 63entry: 64 %cmp = icmp eq i32 %a, 0 65 %sub = sext i1 %cmp to i32 66 ret i32 %sub 67} 68 69; Function Attrs: norecurse nounwind 70define void @test_iequi_store(i32 zeroext %a, i32 zeroext %b) { 71; CHECK-LABEL: test_iequi_store: 72; CHECK: # BB#0: # %entry 73; CHECK-NEXT: addis r5, r2, .LC0@toc@ha 74; CHECK-NEXT: xor r3, r3, r4 75; CHECK-NEXT: ld r12, .LC0@toc@l(r5) 76; CHECK-NEXT: cntlzw r3, r3 77; CHECK-NEXT: srwi r3, r3, 5 78; CHECK-NEXT: stw r3, 0(r12) 79; CHECK-NEXT: blr 80entry: 81 %cmp = icmp eq i32 %a, %b 82 %conv = zext i1 %cmp to i32 83 store i32 %conv, i32* @glob, align 4 84 ret void 85} 86 87; Function Attrs: norecurse nounwind 88define void @test_iequi_sext_store(i32 zeroext %a, i32 zeroext %b) { 89; CHECK-LABEL: test_iequi_sext_store: 90; CHECK: # BB#0: # %entry 91; CHECK-NEXT: xor r3, r3, r4 92; CHECK-NEXT: addis r5, r2, .LC0@toc@ha 93; CHECK-NEXT: cntlzw r3, r3 94; CHECK-NEXT: ld r4, .LC0@toc@l(r5) 95; CHECK-NEXT: srwi r3, r3, 5 96; CHECK-NEXT: neg r3, r3 97; CHECK-NEXT: stw r3, 0(r4) 98; CHECK-NEXT: blr 99entry: 100 %cmp = icmp eq i32 %a, %b 101 %sub = sext i1 %cmp to i32 102 store i32 %sub, i32* @glob, align 4 103 ret void 104} 105 106; Function Attrs: norecurse nounwind 107define void @test_iequi_z_store(i32 zeroext %a) { 108; CHECK-LABEL: test_iequi_z_store: 109; CHECK: # BB#0: # %entry 110; CHECK-NEXT: addis r4, r2, .LC0@toc@ha 111; CHECK-NEXT: cntlzw r3, r3 112; CHECK-NEXT: ld r4, .LC0@toc@l(r4) 113; CHECK-NEXT: srwi r3, r3, 5 114; CHECK-NEXT: stw r3, 0(r4) 115; CHECK-NEXT: blr 116entry: 117 %cmp = icmp eq i32 %a, 0 118 %conv = zext i1 %cmp to i32 119 store i32 %conv, i32* @glob, align 4 120 ret void 121} 122 123; Function Attrs: norecurse nounwind 124define void @test_iequi_sext_z_store(i32 zeroext %a) { 125; CHECK-LABEL: test_iequi_sext_z_store: 126; CHECK: # BB#0: # %entry 127; CHECK-NEXT: addis r4, r2, .LC0@toc@ha 128; CHECK-NEXT: cntlzw r3, r3 129; CHECK-NEXT: ld r4, .LC0@toc@l(r4) 130; CHECK-NEXT: srwi r3, r3, 5 131; CHECK-NEXT: neg r3, r3 132; CHECK-NEXT: stw r3, 0(r4) 133; CHECK-NEXT: blr 134entry: 135 %cmp = icmp eq i32 %a, 0 136 %sub = sext i1 %cmp to i32 137 store i32 %sub, i32* @glob, align 4 138 ret void 139} 140