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 \ 4; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl \ 5; RUN: --check-prefixes=CHECK,BE 6; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \ 7; RUN: -ppc-gpr-icmps=all -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; RUN: --check-prefixes=CHECK,LE 10 11@glob = dso_local local_unnamed_addr global i64 0, align 8 12 13; Function Attrs: norecurse nounwind readnone 14define dso_local signext i32 @test_iltsll(i64 %a, i64 %b) { 15; CHECK-LABEL: test_iltsll: 16; CHECK: # %bb.0: # %entry 17; CHECK-NEXT: sradi r5, r3, 63 18; CHECK-NEXT: rldicl r6, r4, 1, 63 19; CHECK-NEXT: subc r3, r3, r4 20; CHECK-NEXT: adde r3, r6, r5 21; CHECK-NEXT: xori r3, r3, 1 22; CHECK-NEXT: blr 23entry: 24 %cmp = icmp slt i64 %a, %b 25 %conv = zext i1 %cmp to i32 26 ret i32 %conv 27} 28 29; Function Attrs: norecurse nounwind readnone 30define dso_local signext i32 @test_iltsll_sext(i64 %a, i64 %b) { 31; CHECK-LABEL: test_iltsll_sext: 32; CHECK: # %bb.0: # %entry 33; CHECK-NEXT: sradi r5, r3, 63 34; CHECK-NEXT: rldicl r6, r4, 1, 63 35; CHECK-NEXT: subc r3, r3, r4 36; CHECK-NEXT: adde r3, r6, r5 37; CHECK-NEXT: xori r3, r3, 1 38; CHECK-NEXT: neg r3, r3 39; CHECK-NEXT: blr 40entry: 41 %cmp = icmp slt i64 %a, %b 42 %sub = sext i1 %cmp to i32 43 ret i32 %sub 44} 45 46; Function Attrs: norecurse nounwind readnone 47define dso_local signext i32 @test_iltsll_sext_z(i64 %a) { 48; CHECK-LABEL: test_iltsll_sext_z: 49; CHECK: # %bb.0: # %entry 50; CHECK-NEXT: sradi r3, r3, 63 51; CHECK-NEXT: blr 52entry: 53 %cmp = icmp slt i64 %a, 0 54 %sub = sext i1 %cmp to i32 55 ret i32 %sub 56} 57 58; Function Attrs: norecurse nounwind 59define dso_local void @test_iltsll_store(i64 %a, i64 %b) { 60; CHECK-LABEL: test_iltsll_store: 61; CHECK: # %bb.0: # %entry 62; CHECK-NEXT: sradi r6, r3, 63 63; CHECK-NEXT: addis r5, r2, glob@toc@ha 64; CHECK-NEXT: subc r3, r3, r4 65; CHECK-NEXT: rldicl r3, r4, 1, 63 66; CHECK-NEXT: adde r3, r3, r6 67; CHECK-NEXT: xori r3, r3, 1 68; CHECK-NEXT: std r3, glob@toc@l(r5) 69; CHECK-NEXT: blr 70; CHECK-DIAG: subfc [[REG3:r[0-9]+]], r4, r3 71entry: 72 %cmp = icmp slt i64 %a, %b 73 %conv1 = zext i1 %cmp to i64 74 store i64 %conv1, i64* @glob, align 8 75 ret void 76} 77 78; Function Attrs: norecurse nounwind 79define dso_local void @test_iltsll_sext_store(i64 %a, i64 %b) { 80; CHECK-LABEL: test_iltsll_sext_store: 81; CHECK: # %bb.0: # %entry 82; CHECK-NEXT: sradi r6, r3, 63 83; CHECK-NEXT: addis r5, r2, glob@toc@ha 84; CHECK-NEXT: subc r3, r3, r4 85; CHECK-NEXT: rldicl r3, r4, 1, 63 86; CHECK-NEXT: adde r3, r3, r6 87; CHECK-NEXT: xori r3, r3, 1 88; CHECK-NEXT: neg r3, r3 89; CHECK-NEXT: std r3, glob@toc@l(r5) 90; CHECK-NEXT: blr 91; CHECK-DIAG: subfc [[REG3:r[0-9]+]], r4, r3 92entry: 93 %cmp = icmp slt i64 %a, %b 94 %conv1 = sext i1 %cmp to i64 95 store i64 %conv1, i64* @glob, align 8 96 ret void 97} 98 99; Function Attrs: norecurse nounwind 100define dso_local void @test_iltsll_sext_z_store(i64 %a) { 101; CHECK-LABEL: test_iltsll_sext_z_store: 102; CHECK: # %bb.0: # %entry 103; CHECK-NEXT: addis r4, r2, glob@toc@ha 104; CHECK-NEXT: sradi r3, r3, 63 105; CHECK-NEXT: std r3, glob@toc@l(r4) 106; CHECK-NEXT: blr 107entry: 108 %cmp = icmp slt i64 %a, 0 109 %conv2 = sext i1 %cmp to i64 110 store i64 %conv2, i64* @glob, align 8 111 ret void 112} 113