1; RUN: llc -relocation-model=pic -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \ 2; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \ 3; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl 4; RUN: llc -relocation-model=pic -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \ 5; RUN: -ppc-gpr-icmps=all -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \ 6; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl 7 8@glob = common local_unnamed_addr global i16 0, align 2 9 10; Function Attrs: norecurse nounwind readnone 11define signext i32 @test_igtus(i16 zeroext %a, i16 zeroext %b) { 12; CHECK-LABEL: test_igtus: 13; CHECK: sub [[REG:r[0-9]+]], r4, r3 14; CHECK-NEXT: rldicl r3, [[REG]], 1, 63 15; CHECK-NEXT: blr 16entry: 17 %cmp = icmp ugt i16 %a, %b 18 %conv2 = zext i1 %cmp to i32 19 ret i32 %conv2 20} 21 22; Function Attrs: norecurse nounwind readnone 23define signext i32 @test_igtus_sext(i16 zeroext %a, i16 zeroext %b) { 24; CHECK-LABEL: test_igtus_sext: 25; CHECK: sub [[REG:r[0-9]+]], r4, r3 26; CHECK-NEXT: sradi r3, [[REG]], 63 27; CHECK-NEXT: blr 28entry: 29 %cmp = icmp ugt i16 %a, %b 30 %sub = sext i1 %cmp to i32 31 ret i32 %sub 32} 33 34; Function Attrs: norecurse nounwind readnone 35define signext i32 @test_igtus_z(i16 zeroext %a) { 36; CHECK-LABEL: test_igtus_z: 37; CHECK: cntlzw r3, r3 38; CHECK-NEXT: srwi r3, r3, 5 39; CHECK-NEXT: xori r3, r3, 1 40; CHECK-NEXT: blr 41entry: 42 %cmp = icmp ne i16 %a, 0 43 %conv1 = zext i1 %cmp to i32 44 ret i32 %conv1 45} 46 47; Function Attrs: norecurse nounwind readnone 48define signext i32 @test_igtus_sext_z(i16 zeroext %a) { 49; CHECK-LABEL: test_igtus_sext_z: 50; CHECK: cntlzw r3, r3 51; CHECK-NEXT: srwi r3, r3, 5 52; CHECK-NEXT: xori r3, r3, 1 53; CHECK-NEXT: neg r3, r3 54; CHECK-NEXT: blr 55entry: 56 %cmp = icmp ne i16 %a, 0 57 %sub = sext i1 %cmp to i32 58 ret i32 %sub 59} 60 61; Function Attrs: norecurse nounwind 62define void @test_igtus_store(i16 zeroext %a, i16 zeroext %b) { 63; CHECK-LABEL: test_igtus_store: 64; CHECK: sub [[REG:r[0-9]+]], r4, r3 65; CHECK: rldicl {{r[0-9]+}}, [[REG]], 1, 63 66; CHECK: blr 67entry: 68 %cmp = icmp ugt i16 %a, %b 69 %conv3 = zext i1 %cmp to i16 70 store i16 %conv3, i16* @glob, align 2 71 ret void 72} 73 74; Function Attrs: norecurse nounwind 75define void @test_igtus_sext_store(i16 zeroext %a, i16 zeroext %b) { 76; CHECK-LABEL: test_igtus_sext_store: 77; CHECK: sub [[REG:r[0-9]+]], r4, r3 78; CHECK: sradi {{r[0-9]+}}, [[REG]], 63 79; CHECK: blr 80entry: 81 %cmp = icmp ugt i16 %a, %b 82 %conv3 = sext i1 %cmp to i16 83 store i16 %conv3, i16* @glob, align 2 84 ret void 85} 86 87; Function Attrs: norecurse nounwind 88define void @test_igtus_z_store(i16 zeroext %a) { 89; CHECK-LABEL: test_igtus_z_store: 90; CHECK: cntlzw r3, r3 91; CHECK: srwi r3, r3, 5 92; CHECK: xori r3, r3, 1 93; CHECK: sth r3, 0(r4) 94; CHECK-NEXT: blr 95entry: 96 %cmp = icmp ne i16 %a, 0 97 %conv2 = zext i1 %cmp to i16 98 store i16 %conv2, i16* @glob, align 2 99 ret void 100} 101 102; Function Attrs: norecurse nounwind 103define void @test_igtus_sext_z_store(i16 zeroext %a) { 104; CHECK-LABEL: test_igtus_sext_z_store: 105; CHECK: cntlzw r3, r3 106; CHECK: srwi r3, r3, 5 107; CHECK: xori r3, r3, 1 108; CHECK: neg r3, r3 109; CHECK: sth r3, 0(r4) 110; CHECK-NEXT: blr 111entry: 112 %cmp = icmp ne i16 %a, 0 113 %conv2 = sext i1 %cmp to i16 114 store i16 %conv2, i16* @glob, align 2 115 ret void 116} 117 118